【问题标题】:Custom error message for `requiredIf` validation in laravellaravel 中“requiredIf”验证的自定义错误消息
【发布时间】:2020-02-26 00:31:57
【问题描述】:

我正在开发一个 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' => '...',但这也没有用,而且似乎找不到任何文档或适用于这种情况的示例。

【问题讨论】:

  • sum.required_if 应该可以工作。尝试删除numeric 验证,然后检查
  • @ascsoftw 我已经尝试过使用和不使用数字验证。他们都工作。验证部分有效......它只是自定义错误消息,无法按预期工作。

标签: laravel validation laravel-5


【解决方案1】:

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

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

【讨论】:

  • 我花了很多时间试图找到一种让它工作的方法,这太荒谬了,以至于在任何地方都没有记录。感谢您的正确回答。
【解决方案2】:

我对此进行了一段时间的修改,并注意到要使其正常工作,我需要定义

'sum.required' => 'This cannot be blank'

而不是'sum.required_if' => 'This cannot be blank',

不确定这是预期的行为还是只是一种解决方法,但我的推断是,使用回调 Rule::requiredIf(function() use ($request){...}) 时,参数 :other:value 未传递,因此它回退到 required 消息传递,我猜这个这是有道理的,因为 required_ifrequired 不会在同一个 :attribute 上使用。

希望这对遇到此问题的人有所帮助。

【讨论】:

    【解决方案3】:

    首先,create a rule name isSpecial 或其他

    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 在大多数情况下,您可能会在语言文件中指定自定义消息,而不是直接将它们传递给验证器。为此,请将您的消息添加到 resources/lang/xx/validation.php 语言文件中的自定义数组中。

    'custom' => [
        'email' => [
            'required' => 'We need to know your e-mail address!',
        ],
    ],
    

    简单通知: - 我建议使用HTTP Requests,而不是在你的控制器中使用验证并直接运行

    【讨论】:

    • 感谢@Mahmoud,我理解您的逻辑并感谢您的建议,但该问题旨在找到一种方法来向 Laravel 的 required_if 验证添加自定义消息(请参阅 laravel.com/docs/5.8/validation#rule-required-if
    • @natral 是的,我知道,但我搜索了这一点,但找不到任何关于如何执行此操作的参考资料或文档?我访问了源代码 Illuminate\Validation\Rules\RequiredIf.php 我没有找到任何打印自定义消息的方法,但我明天会再试一次以找到方法:)。
    猜你喜欢
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2015-09-07
    • 1970-01-01
    • 2014-05-31
    • 2017-06-28
    • 2017-12-13
    相关资源
    最近更新 更多