laravel中`requiredIf`验证的自定义错误消息

时间:2019-10-30 16:32:09

标签: laravel validation laravel-5

我正在研究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' => '...',但这也不起作用,而且似乎找不到这种情况的任何文档或示例。

3 个答案:

答案 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}}消息传递,我想这很有意义,因为requiredrequired_if不会在同一required上使用。

希望这可以帮助遇到此问题的任何人。

答案 2 :(得分:0)

看起来从 Laravel 8 开始,使用 required_if 可以按预期工作,或者不会像前面提到的那样依赖 required:

'sum.required_if' => 'This cannot be blank',