69. 请求 输入数据的预处理和规范化

  • 在 Laravel 的全局中间件中默认包含了 TrimStrings 和 ConvertEmptyStringsToNull 两个中间件。这些中间件被列在 App\Http\Kernel 类中。它们会自动处理所有请求中传入的字符串字段。

如果你想停用这些功能,你可以在 App\Http\Kernel 类的 $middleware 属性中移除这些中间件。

  • 你可以通过 Illuminate\Http\Request 的实例,借助几个简单的方法,就可以获取到用户输入的所有数据。而不需要担心发起请求时使用了哪一种请求方式。

获取所有输入数据

你可以使用 all 方法以 数组 形式获取到所有输入数据:

$input = $request->all();

获取指定输入值

input 方法通常被用来获取用户输入数据:

$name = $request->input('name');

你可以给 input 方法的第二个参数传入一个默认值。当请求的输入数据不存在于此请求时,返回该默认值:

$name = $request->input('name', 'Sally');

如果传输表单数据中包含「数组」形式的数据,那么可以使用「点」语法来获取数组:

$name = $request->input('products.0.name');

$names = $request->input('products.*.name');

通过查询字符串获取输入数据

使用 input 方法可以从整个请求中获取输入数据(包括查询字符串),而 query 方法可以只从查询字符串中获取输入数据:

$name = $request->query('name');

如果请求的查询字符串数据不存在,则将返回这个方法的第二个参数:

$name = $request->query('name', 'Helen');

你可以不提供参数调用 query 方法来将所有查询字符串作为一个关联数组取回:

$query = $request->query();

通过动态属性获取输入数据

你也可以通过 Illuminate\Http\Request 实例的动态属性来获取用户输入的数据。例如,如果你应用程序表单中包含 name 字段,那么可以像这样访问提交的值:

$name = $request->name;

Laravel 在处理动态属性的优先级是,先从请求的数据中查找,没有的话再到路由参数中找。

获取 JSON 输入信息

当你发送 JSON 请求到应用时,只要请求表头中设置了 Content-Type 为 application/json,你就可以直接从 Input 方法中获取 JSON 数据。你也可以通过 「点」语法来读取 JSON 数组:

$name = $request->input('user.name');

获取部分输入数据

如果你需要获取输入数据的子集,则可以用 only 和 except 方法。这两个方法都接收单个 数组 或动态列表作为参数:

$input = $request->only(['username', 'password']);

$input = $request->only('username', 'password');

$input = $request->except(['credit_card']);

$input = $request->except('credit_card');

确定是否有输入值

要判断请求是否存在该数据,可以使用 has 方法。当请求中存在该数据时,has 方法就会返回 true:

if ($request->has('name')) {
    //
}

当提供一个数组作为参数时,has 方法将确定是否存在所有指定的值:

if ($request->has(['name', 'email'])) {
    //
}

如果你想判断请求中存在数据并且不为空时,你可以使用 filled 方法:

if ($request->filled('name')) {
    //
}

你可能感兴趣的:(69. 请求 输入数据的预处理和规范化)