Laravel 自定义规则的自定义验证错误信息
Laravel custom rule's custom validation error message
我有一个自定义规则,它是我使用规则对象创建的,它工作正常,除了一件事,它不会获取我在组件中为它创建的自定义验证消息,而是选择分配给它的任何内容在 validation.php 文件中或翻译后的 validation.php 文件中的等效翻译。其他非自定义规则按预期与同一字段的自定义消息一起工作。
组件:
public function rules()
{
return[
'topic' => ['required', 'string', 'max:250', 'min:5', new Profane],
'name' => ['required', 'string', 'max:250'],
'email' => ['required', 'email:rfc,dns', 'max:250']
];
}
protected $messages = [
'topic.required' => 'some message',
'topic.max' => 'some message',
'topic.min' => 'some message',
--> 'topic.profane' => 'some message',
'name.required' => 'some message',
'name.max' => 'some message.',
'email.email' => 'some message',
'email.required' => 'some message',
];
规则对象:
public function passes($attribute, $value)
{
$profane = ProfaneWord::all();
$words = $profane->pluck('word');
foreach ($words as $word)
{
if (stripos($value, $word) !== false) return false;
}
return true;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return trans('validation.profane');
}
这在使用自定义规则时目前看来是不可能的。问题 in the source 消息只能从 message()
方法中检索。但是,由于验证规则是您自己的 class,您可以随时更改它:
private $message;
public __construct($message = null) {
$this->message = $message;
}
public function passes($attribute, $value)
{
$profane = ProfaneWord::all();
$words = $profane->pluck('word');
foreach ($words as $word)
{
if (stripos($value, $word) !== false) return false;
}
return true;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return $this->message??trans('validation.profane');
}
我有一个自定义规则,它是我使用规则对象创建的,它工作正常,除了一件事,它不会获取我在组件中为它创建的自定义验证消息,而是选择分配给它的任何内容在 validation.php 文件中或翻译后的 validation.php 文件中的等效翻译。其他非自定义规则按预期与同一字段的自定义消息一起工作。
组件:
public function rules()
{
return[
'topic' => ['required', 'string', 'max:250', 'min:5', new Profane],
'name' => ['required', 'string', 'max:250'],
'email' => ['required', 'email:rfc,dns', 'max:250']
];
}
protected $messages = [
'topic.required' => 'some message',
'topic.max' => 'some message',
'topic.min' => 'some message',
--> 'topic.profane' => 'some message',
'name.required' => 'some message',
'name.max' => 'some message.',
'email.email' => 'some message',
'email.required' => 'some message',
];
规则对象:
public function passes($attribute, $value)
{
$profane = ProfaneWord::all();
$words = $profane->pluck('word');
foreach ($words as $word)
{
if (stripos($value, $word) !== false) return false;
}
return true;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return trans('validation.profane');
}
这在使用自定义规则时目前看来是不可能的。问题 in the source 消息只能从 message()
方法中检索。但是,由于验证规则是您自己的 class,您可以随时更改它:
private $message;
public __construct($message = null) {
$this->message = $message;
}
public function passes($attribute, $value)
{
$profane = ProfaneWord::all();
$words = $profane->pluck('word');
foreach ($words as $word)
{
if (stripos($value, $word) !== false) return false;
}
return true;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return $this->message??trans('validation.profane');
}