Я разрабатываю приложение Laravel. Что я делаю в своем приложении, так это то, что я пытаюсь переопределить сообщение пользовательского правила проверки.
У меня есть такие правила проверки в классе запроса:
[
'name'=> [ 'required' ],
'age' => [ 'required', new OverAge() ],
];
Обычно мы переопределяем сообщение об ошибке правил следующим образом:
return [
'title.required' => 'A title is required',
'body.required' => 'A message is required',
];
Но как я могу сделать это с пользовательским классом правила проверки?
вы можете создать собственное правило laravel.com/docs/5.8/validation#пользовательские правила проверки
Я считаю, что это ошибка. Не стесняйтесь отправлять PR в laravel/framework.
Вы не можете просто перезаписать его пользовательскими сообщениями запроса. Если вы посмотрите на класс 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')];
просто любопытно, зачем использовать ?:
вместо ??
@DerekPollard ??
проверяет только, не является ли оно нулевым и установлено. Не проверяет, положительный ли результат. Но оба работают.
вы пробовали использовать
age.over_age
?