Пользовательские правила проверки Laravel должны быть строчными?
У меня есть модель, и у нее есть несколько имен полей, и среди них 'lastName'.
В моем файле FormRequest у меня есть правила и сообщения для этого поля:
$rules = ['lastName.*' => 'lastName_fail: index'];
$messages = ['lastName.*lastName_fail' => This lastName has different value in DB!'];
Когда я отправляю форму, заполняя поле 'lastName' преднамеренно 'неправильным' значением, оно не проходит проверку и возвращает сообщение об ошибке:
validation.last_name_fail
(чего нет в $ сообщениях).
Но когда я изменяю $rules и $messages на:
$rules = ['lastName.*' => 'lastname_fail: index'];
$messages = ['lastName.*lastname_fail' => This lastName has different value in DB!'];
(поэтому фактическое "правило" теперь строчное "lastname_fail"), оно выдает то, что я хочу:
Это lastName имеет другое значение в БД!
Исходя из этого, я могу заключить, что имя правила проверки Laravel может быть только строчным.
Это заявлено где-нибудь в документации?
Если так, возможно, это кому-то поможет.
2 ответа
Это не упоминается в документации. Однако существует шаблон именования как для имени метода правила проверки, так и для имени правила.
Имя метода правила:
Должно быть validate
префикс и остальное должно быть в Camel Case
,
Название правила:
Будет в lowercase
без validate
префикс и каждое слово будет разделено underscore
,
Так что если вы хотите добавить alpha_dash_spaces
правило проверки, тогда соответствующий метод будет назван validateAlphaDashSpaces()
,
Просто проанализируйте $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();
}