Получить сообщение об ошибке от проверки Laravel

Я использую встроенный валидатор Laravel, и я хочу получить первое сообщение об ошибке

if ($validator->fails()) {
     $error = $validator->messages()->toJson();
     .....
}

Это результат, когда я печатаю ошибку

{"name":["The name must be at least 5 characters."],"alamat":["The address must be at least 5 characters."]}

В приведенном выше примере я хочу получить первую ошибку: "Имя должно быть не менее 5 символов". Как я могу это сделать?

Ответ 1

Попробуйте следующее:

if ($validator->fails()) {
   $error = $validator->errors()->first();
}

Ответ 2

В вашем запросе ajax, когда вы получите data, попробуйте data.name.

Это даст вам сообщение об ошибке для поля name.

$.ajax({
        url: "/your-save-url",
        type: "post",
        data: serializedData,
        success: function(data) { alert(data.name)}
    });

Ответ 3

Если проверка не удалась, метод withErrors можно использовать для флеш-сообщения об ошибках в сеансе. Это массив, и этот метод будет автоматически делиться $errors со всеми представлениями после перенаправления.

return redirect('register')->withErrors($validator, 'login');

Доступ к MessageBag можно получить с помощью экземпляра из переменной $errors:

{{ $errors->login->first('email') }}

API формы docs

Надеюсь, что это будет полезно.

Ответ 4

В соответствии с Laravel 5.8 2019 года это так просто:

// create the validator and make a validation here...
if ($validator->fails()) {
    $fieldsWithErrorMessagesArray = $validator->messages()->get('*');
}

Вы получите массив массивов имен полей и сообщений об ошибках. Примерно так:

[
    'price'=>
        [ 
            0 => 'Price must be integer',
            1 => 'Price must be greater than 0'
        ]
    'password' => [
        [
            0 => 'Password is required'
        ]
    ]

]

Вы можете использовать другие средства получения сообщений проверки, предоставляемые классом Illuminate\Support\MessageBag (фактически это тип объекта, который возвращает $validator->messages() выше).

Перейдите к your_laravel_project_dir/vendor/illuminate/support/MessageBag.php и найдите некоторые полезные методы, такие как keys, has, hasAny, first, all, isEmpty и т.д., Которые могут вам понадобиться при проверке на наличие ошибок проверки и настройке ответа HTTP. сообщений.

Легко понять, что они делают, посмотрев на исходный код. Вот ссылка на API Laravel 5.8, хотя, вероятно, менее полезная, чем исходный код.