Как переопределить сообщение пользовательского правила проверки в Laravel? - PullRequest
1 голос
/ 30 мая 2019

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

У меня есть правила проверки, подобные этим в классе запроса:

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

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

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

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

1 Ответ

2 голосов
/ 30 мая 2019

Вы не можете просто перезаписать его пользовательскими сообщениями запроса.Если вы посмотрите на класс 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')];
...