将与列无关的Laravel验证放在哪里



例如,我有一个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],

相关内容

  • 没有找到相关文章

最新更新