与列无关的 Laravel 验证放在哪里
Where to put Laravel validation that is not related to column
例如,我有一个处理某些实体创建的 HTTP 请求(让它成为角色)
验证看起来像这样:
class CreateRole extends FormRequest
{
public function rules()
{
return [
'name' => 'required|string|max:255',
'permissions' => ['required', 'array'],
...
而且我有一些与名称或权限列无关的限制。
例如,可以创建的最大角色数量。
这样的自定义验证可以放在name
属性,但是看起来不对。
PS:我知道自定义验证器。关于放在哪里的问题...
您可以在表单请求中使用 after hook
CreateRole.php
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 \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->after(function ($validator) {
if (Role::count() > 10) {
$validator->errors()->add('limit', 'Max number of Roles reached!');
}
});
}
}
您必须创建自定义验证 class,如此 Laravel document 所示,然后将其放入您的验证 class 中,如下所示。
'name' => ['required', 'string', new CustomValidationClass],
例如,我有一个处理某些实体创建的 HTTP 请求(让它成为角色) 验证看起来像这样:
class CreateRole extends FormRequest
{
public function rules()
{
return [
'name' => 'required|string|max:255',
'permissions' => ['required', 'array'],
...
而且我有一些与名称或权限列无关的限制。 例如,可以创建的最大角色数量。
这样的自定义验证可以放在name
属性,但是看起来不对。
PS:我知道自定义验证器。关于放在哪里的问题...
您可以在表单请求中使用 after hook
CreateRole.php
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 \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->after(function ($validator) {
if (Role::count() > 10) {
$validator->errors()->add('limit', 'Max number of Roles reached!');
}
});
}
}
您必须创建自定义验证 class,如此 Laravel document 所示,然后将其放入您的验证 class 中,如下所示。
'name' => ['required', 'string', new CustomValidationClass],