Laravel 的 Illuminate\Http\Request 类提供了一种面向对象的方式,可以与应用程序正在处理的当前 HTTP 请求进行交互,并检索与请求一起提交的输入、cookie 和文件。
表单请求验证 表单请求是封装了自己的验证和授权逻辑的自定义请求类。
表单请求验证
创建表单请求类的命令如下所示:
php artisan make:request StorePostRequest
Laravel 生成的每个表单请求都有两个方法:authorize 和 rules :
authorize方法负责确定当前经过身份验证的用户是否可以执行请求所代表的操作rules方法返回应适用于请求数据的验证规则- 如果验证失败,将生成重定向响应以将用户送回其之前的位置。错误还将闪现到会话中,以便显示。
- 如果请求是 XHR 请求,将向用户返回带有 422 状态代码的 HTTP 响应,其中包括验证错误的 JSON 表示。
public function rules(): array
{
return [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
}
Laravel Precognition 可以为用户提供实时验证体验,而无需在前端 Vue 应用程序中重复验证规则。
- 首先,要为路由启用预识别,HandlePrecognitiveRequests应将中间件添加到路由定义中。您还应该创建一个表单请求来容纳路由的验证规则:
request->validated
$data = $request->validated(); 可以获取到经过验证的请求数据。
- 默认情况下,
validated()方法只会返回在 WarehouseRequest 类的rules()方法中定义了验证规则的字段。 - 如果请求中包含了未在验证规则中定义的字段,这些字段不会被包含在
validated()方法的返回结果中。 - 但是,Laravel 提供了一种方法可以包含未经验证的字段。在 WarehouseRequest 类中,你可以重写
passedValidation()方法来实现这一点。
例如:
protected function passedValidation()
{
$this->merge($this->all());
}
这样做会将所有请求数据合并到已验证的数据中,包括那些没有定义验证规则的字段。
如果你只想获取特定的未验证字段,可以这样做:
protected function passedValidation()
{
$this->merge([
'some_field' => $this->input('some_field'),
]);
}
如果你想获取所有字段,包括未验证的,你可以直接使用 $request->all() 而不是 $request->validated()。但这样做会失去验证的安全性优势。
总的来说,默认情况下,validated() 方法只返回经过验证的字段。如果你需要未经验证的字段,你需要额外的步骤或使用其他方法。在处理敏感数据时,建议只使用经过验证的数据,以确保数据的安全性和有效性。
