【问题标题】:validation value having two possible types具有两种可能类型的验证值
【发布时间】:2017-03-27 05:44:36
【问题描述】:

如果请求值应该是字符串或数组都有效,如何验证?

'val' => 'bail|required|string'
'val' => 'bail|required|array'

验证表达式是什么?

【问题讨论】:

    标签: php laravel validation request


    【解决方案1】:

    int OR array of int

    的字段验证示例
    'id' => [
                function ($attribute, $value, $fail) {
                    if (!is_array($value) && !is_numeric($value)) {
                        $fail('validation.int|int[]');
                    }
    
                    if (is_numeric($value) && (int)$value < 1) {
                        $fail('validation.min.numeric');
                    }
                },
            ],
    'id.*' => 'int|min:1',
    

    【讨论】:

      【解决方案2】:

      只使用闭包

      "val" => [function($attribute, $value, $fail) {
               if (!(is_array($value) || is_string($value))) $fail("$attribute must be array or string");
           }]
      

      【讨论】:

      • 你能edit你的答案添加细节或解释你的答案吗?特别是为什么以及如何回答这个问题
      【解决方案3】:

      @lionel-chan 提供的解决方案是最优雅的方式,但您也可以通过检查变量的类型来添加适当的规则:

      $string_or_array_rule = is_array($inputs['val']) ? 'array' : 'string'
      
      "val" => "bail|required|{$string_or_array_rule}"
      

      【讨论】:

        【解决方案4】:

        我认为没有办法使用开箱即用的验证规则来实现它。您需要使用Custom Validation Rules 来实现:

        AppServiceProviderboot方法中,添加

        public function boot()
        {
            Validator::extend('string_or_array', function ($attribute, $value, $parameters, $validator) {
                return is_string($value) || is_array($value);
            });
        }
        

        然后就可以开始使用了:

        'val' => 'bail|required|string_or_array'
        

        您可以选择设置自定义验证错误消息,或使用自定义验证类来实现它。查看上面的文档链接了解更多信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-23
          • 2021-04-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多