我正在研究Laravel 5.8项目,并试图显示自定义验证消息以进行使用requiredIf
验证规则的验证。
这是我的设置方式:
$validation = Validator::make(
$request->all(),
[
...
'sum' => [
Rule::requiredIf(function() use ($request){
$model = Model::find($request->id);
return $model->is_special; //returns a boolean value
}),
'numeric'
],
...
],
[
...
'sum.required_if' => 'This cannot be blank',
'sum.numeric' => 'Must use a number here',
...
]
);
现在,验证工作正常,numeric
验证的自定义消息会显示,但是我从requiredIf()
方法获得的消息是Laravel的默认错误消息。
我也尝试过使用'sum.requiredIf' => '...'
,但这也不起作用,而且似乎找不到这种情况的任何文档或示例。
答案 0 :(得分:1)
首先,create a rule名称是Special或其他名称
php artisan make:rule isSpecial
转到App \ Rules \ isSpecial.php
private $id;
public function __construct($id) // pass id or what you need
{
//
$this->id=$id;
}
public function passes($attribute, $value) // customize your rules here
{
//
return Model::find($request->id)->is_special;
}
public function message() // here is answer for your question
{
return 'The validation error message.'; // your message
}
在您的控制器中
use App\Rules\isSpecial;
\Validator::make($request->all(), [
'sum' => new isSpecial() ,
])->validate();
另一个想法:
Specifying Custom Messages In Language Files 在大多数情况下,您可能会在语言文件中指定自定义消息,而不是将其直接传递给Validator。为此,请将您的消息添加到resources / lang / xx / validation.php语言文件中的自定义数组。
'custom' => [
'email' => [
'required' => 'We need to know your e-mail address!',
],
],
简单通知: -我建议使用HTTP Requests代替在控制器中使用验证并直接运行功能
答案 1 :(得分:1)
我已经对此进行了一段时间的修补,并注意到要使此方法有效,我需要定义
'sum.required' => 'This cannot be blank'
而不是'sum.required_if' => 'This cannot be blank',
。
不知道这是预期的行为还是解决方法,但我的推断是,在回调Rule::requiredIf(function() use ($request){...})
中,参数:other
和:value
并未传递,因此返回到{{ 1}}消息传递,我想这很有意义,因为required
和required_if
不会在同一required
上使用。
希望这可以帮助遇到此问题的任何人。
答案 2 :(得分:0)
看起来从 Laravel 8 开始,使用 required_if 可以按预期工作,或者不会像前面提到的那样依赖 required:
'sum.required_if' => 'This cannot be blank',