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

时间:2017-07-23 17:24:26

标签: laravel validation validating

我有模型,它有几个字段名称,' lastName'就是其中之一。

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

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

当我提交表单时,请填写' lastName'故意错误的领域'值,它没有通过验证,并返回错误消息:

validation.last_name_fail

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

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

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

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

此lastName在DB中具有不同的值!

  

由此我可以得出结论,Laravel的验证规则名称可能是   只有小写

     

是否在文档中的任何地方声明了?

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

2 个答案:

答案 0 :(得分:1)

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

规则方法名称:

必须有validate前缀,其余部分必须位于Camel Case

规则名称:

它位于lowercase,不带validate前缀,每个字都会以underscore分隔。

因此,如果您要添加alpha_dash_spaces验证规则,则相应的方法将命名为validateAlphaDashSpaces()

答案 1 :(得分:0)

在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();
    }