Пользовательские правила проверки 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();
    }
Другие вопросы по тегам