我有模型,它有几个字段名称,' 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的验证规则名称可能是 只有小写。
是否在文档中的任何地方声明了?
如果是这样,也许对某人有帮助。
答案 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();
}