Как переопределить сообщение пользовательского правила проверки в Laravel?

Я разрабатываю приложение Laravel. Что я делаю в своем приложении, так это то, что я пытаюсь переопределить сообщение пользовательского правила проверки.

У меня есть такие правила проверки в классе запроса:

[
    'name'=> [ 'required' ],
    'age' => [ 'required', new OverAge() ],
];

Обычно мы переопределяем сообщение об ошибке правил следующим образом:

return [
    'title.required' => 'A title is required',
    'body.required'  => 'A message is required',
];

Но как я могу сделать это с пользовательским классом правила проверки?

вы пробовали использовать age.over_age ?

Derek Pollard 30.05.2019 21:23

вы можете создать собственное правило laravel.com/docs/5.8/validation#пользовательские правила проверки

user1405631 30.05.2019 21:29

Я считаю, что это ошибка. Не стесняйтесь отправлять PR в laravel/framework.

mpyw 11.04.2020 17:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
5
3
1 671
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы не можете просто перезаписать его пользовательскими сообщениями запроса. Если вы посмотрите на класс Validator:

/**
 * Validate an attribute using a custom rule object.
 *
 * @param  string  $attribute
 * @param  mixed  $value
 * @param  \Illuminate\Contracts\Validation\Rule  $rule
 * @return void
 */
protected function validateUsingCustomRule($attribute, $value, $rule)
{
    if (! $rule->passes($attribute, $value)) {
        $this->failedRules[$attribute][get_class($rule)] = [];

        $this->messages->add($attribute, $this->makeReplacements(
            $rule->message(), $attribute, get_class($rule), []
        ));
    }
}

Как видите, это просто добавление $rule->message() прямо в корзину сообщений.

Однако вы можете добавить параметр для сообщения в свой собственный класс правил:

public function __construct(string $message = null)
{
    $this->message = $message;
}

Затем в вашей функции сообщения:

public function message()
{
    return $this->message ?: 'Default message';
}

И, наконец, в ваших правилах:

'age' => ['required', new OverAge('Overwritten message')];

просто любопытно, зачем использовать ?: вместо ??

Derek Pollard 30.05.2019 23:01

@DerekPollard ?? проверяет только, не является ли оно нулевым и установлено. Не проверяет, положительный ли результат. Но оба работают.

Chin Leung 30.05.2019 23:07

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