例如,我有一个HTTP请求,它处理一些实体创建(让它成为Role)验证看起来是这样的:
class CreateRole extends FormRequest
{
public function rules()
{
return [
'name' => 'required|string|max:255',
'permissions' => ['required', 'array'],
...
我有一些与名称或权限列无关的限制。例如,可以创建的最大角色数量。
这种自定义验证可以放置在name
属性中,但看起来是错误的。
PS:我知道自定义验证器。关于将其放置在何处的问题…
您可以在表单请求CreateRole.php
中使用after hook
class CreateRole extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'title' => ['required', 'string', 'max:255'],
'permissions' => ['required', 'array'],
];
}
/**
* Configure the validator instance.
*
* @param IlluminateValidationValidator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->after(function ($validator) {
if (Role::count() > 10) {
$validator->errors()->add('limit', 'Max number of Roles reached!');
}
});
}
}
您必须创建自定义验证类,如本Laravel文档所示,并将其放入validior类中,如下所示。
'name' => ['required', 'string', new CustomValidationClass],