表单验证
怎么设置动态的验证规则?
如果我们的限制规则是动态依赖于其他条件的,那么我们可以动态地创建规则数组
public function save(Request $request) { $validationArray = [ 'title' => 'required', 'name' => 'required', 'logo' => 'file|max:1024', 'position' => 'required', ]; if (!Auth::check()) { $validationArray = array_merge($validationArray, [ 'email' => 'required|email|unique:users', 'password' => 'required|confirmed|min:5', 'name' => 'required' ]); } // }
自定义抛出422状态码
如果我们不使用 validate () 或 Form Request,但仍然需要使用相同的 422 状态码和错误结构抛出错误,那么可以手动抛出 throw ValidationException::withMessages()
if (! $user || ! Hash::check($request->password, $user->password)) { throw ValidationException::withMessages([ 'email' => ['邮箱格式不正确'], ]); }
图片验证
我们在验证上传的图片时,可以指定所需的尺寸
['image' => 'dimensions:max_width=1096,max_height=1096']
自定义验证错误的信息
我们只需在 resources/lang/xx/validation.php
文件创建适当的数组结构,就可以定义每个 字段、规则和语言的验证错误消息。
'custom' => [ 'email' => [ 'required' => '电子邮箱必填', ], ],
某些条件的验证规则
如果验证规则依赖于某些条件,则可以通过将 withValidator() 添加到 FormRequest 类中来修改规则,并在那里指定自定义逻辑。
例如,如果我们只想为某些用户角色添加验证规则。
use Illuminate\Validation\Validator; class XxxxxRequest extends FormRequest { public function withValidator(Validator $validator) { if (auth()->user()->is_admin) { $validator->addRules(['xxxx' => 'required']); } } }
更改默认验证消息
如果要更改特定字段和特定验证规则的默认验证错误消息,只需将 messages() 方法添加到 FormRequest 类中。
class UserRequest extends FormRequest { public function rules() { return ['name' => 'required']; } public function messages() { return ['name.required' => '请填写姓名']; } }
预验证
我们想在默认的 Laravel 验证之前修改某个字段,(类似常用的beforeXxx(){}、afterXxx(){})
FormRequest 类中有一个方法 prepareForValidation () , 能实现我们的需求:
在验证之前修改字段
protected function prepareForValidation() { $this->merge([ 'myBlog' => Illuminate\Support\Str::slug($this->myBlog), ]); }
第一次验证错误时就终止程序
默认情况下,将在列表中返回 Laravel 验证错误,检查所有验证规则。
但是如果我们想要在第一个错误之后终止这个过程,使用验证规则叫做 bail:
$request->validate([ 'title' => 'bail|required|unique:posts|max:255', 'body' => 'required', ]);