Laravel 自定义验证规则应该是小写?

Laravel Custom Validation Rules should be lowercase?

我有模型,它有几个字段名,'lastName'在其中。

在我的 FormRequest 文件中,我有这个字段的规则和消息:

$rules = ['lastName.*' => 'lastName_fail: index'];
$messages = ['lastName.*lastName_fail' => This lastName has different value in DB!'];

当我提交表单时,故意用 'wrong' 值填充 'lastName' 字段,它没有通过验证,并且 returns 错误消息:

validation.last_name_fail

(这不是 $messages 中的内容)。

但是当我将 $rules 和 $messages 更改为:

$rules = ['lastName.*' => 'lastname_fail: index'];
$messages = ['lastName.*lastname_fail' => This lastName has different value in DB!'];

(所以实际的 "rule" 现在是小写 "lastname_fail"),它输出我想要的:

这个姓氏在数据库中有不同的值!

from this I may conclude that Laravel's validation rule name may be only lowercase.

Is it declared anywhere in documentation?

如果是这样,也许对某人有帮助。

文档中没有提到。但是,验证规则方法名称和规则名称都有一个命名模式。

规则方法名称:

它必须有 validate 前缀,其余部分必须在 Camel Case.

规则名称:

它将在 lowercase 中,没有 validate 前缀,每个单词将由 underscore 分隔。


所以如果你想添加alpha_dash_spaces验证规则那么相应的方法将被命名为validateAlphaDashSpaces().

在Validator

之前简单地解析$request[data]
use Illuminate\Support\Str;
    
    $request['name_it'] = Str::lower($request['name_it']);
    $request['name_en'] = Str::lower($request['name_en']);
                
    $validator = Validator::make($request->all(), [
    'name_it' => ['required', 'string', 'max:255', 'unique:categories'],
    'name_en' => ['required', 'string', 'max:255', 'unique:categories'],
    ]);
    if ($validator->fails()) {
        return redirect()
    ->back()->withErrors($validator)
    ->withInput();
    }