Laravel: проверьте причину сбоя валидатора

Я выполняю проверку атрибута с двумя правилами: required и unique. Атрибут att1 в сочетании с att2 и att3 должен быть уникальным в базе данных. Я хочу отображать сообщение об ошибке в другом месте по разным причинам сбоя. Например, если проверка не удалась из-за правила required, я хочу отобразить сообщение об ошибке в одном div, а если это не удалось из-за правила unique, я хочу отобразить сообщение об ошибке в другом div.

Вот мой валидатор:

$messages = [
        'att1.unique' => 'Given combination has already been registered.',
        'att1.required' => 'Please select att1',
        'att2.required' => 'Please select your att2',
        'att3.required' => 'Please select your att3',
    ];
    return Validator::make($data, [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:6', 'confirmed'],
        'att1' => [
            'bail','required',
            Rule::unique('users')->where(function ($query) use($attr1,$attr2,$attr3) {
                return $query->where('att1', $attr1)
                ->where('att2', $attr2)
                ->where('att3', $attr2);
            }),
        ],
        'att2' => ['required'],
        'att3' => ['required'],
    ],$messages);

Как мне отобразить сообщение об ошибке для att1.unique и att1.required в разных местах, когда они возникают?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
260
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно будет выполнить две условные проверки следующим образом.

if ($errors->has('att1')) {
    foreach ($errors->get('att1') as $error) {
        // This would list all errors for the att1 field
        // Then it's just a simple conditional statement to
        // check if it's the error you want
        if ($error == 'Please select att1') {} 
    }
}

и повторите это для уникального правила. Кажется, я не могу найти другого лучшего способа сделать это.

Вы можете проверить документация, чтобы узнать, как извлекать ошибки для определенного поля.

Спасибо ! Это сработало. Небольшой вопрос: можно ли избежать этого цикла for, потому что $errors -> get('att1') всегда имеет только одно значение. Если значение не указано во входных данных, проверка required завершится ошибкой и правило unique не проверяется из-за правила bail. И если проверка unque завершилась неудачно, это означает, что введены данные и правило required не может завершиться ошибкой. Я попробовал if ($errors->get('att1') == 'Please select att1') { $errors->first('att1') } , но он ничего не отобразил.

Xitish 31.12.2018 07:44

В данном случае можно использовать $errors->first('att1') :)

Mozammil 31.12.2018 08:26

Другие вопросы по теме