【问题标题】:Laravel - Form validation - array one minimum 1 field requiredLaravel - 表单验证 - 数组至少需要 1 个字段
【发布时间】:2017-06-02 01:43:43
【问题描述】:

我有一个这样的表单数组:

<textarea name="intro[en]"></textarea>
<textarea name="intro[fr]"></textarea>
<textarea name="intro[de]"></textarea>

我有如下验证规则:

public function rules()
{
        return [ 
            'intro.*' => 'required'
        ];
}

我真正需要的是至少填写一个 intro 。

现有的验证器可以做到这一点吗?如果是这样,语法是什么?如果没有,我将如何创建该验证器?

【问题讨论】:

    标签: php laravel validation


    【解决方案1】:

    你要找的是required_without_all:

    'intro.en' => 'required_without_all: intro.fr, intro.de',
    'intro.fr' => 'required_without_all: intro.en, intro.de',
    'intro.de' => 'required_without_all: intro.en, intro.fr',
    

    【讨论】:

    • 谢谢 :) 有没有更好的方法让它更有活力?以防我添加新语言?
    【解决方案2】:

    你也可以试试这个

    'intro' => 'required|array|min:1'
    

    【讨论】:

      【解决方案3】:

      我认为你应该试试这个:

      public function rules()
      {
       return [
         'intro.*.en' => 'required',
         'intro.*.fr' => 'required',
         'intro.*.de' => 'required',
       ];
      }
      

      希望这对你有用!

      【讨论】:

        【解决方案4】:

        您可以在 AppServiceProvide 中为其定义自定义规则,如下面的代码

        $this->app['validator']->extend('emptyArray', function ($attribute, $values, $parameters)
            {
                foreach($values as $data){
                    if(count($data)) return true;
                }
                return false;
            });
        
            Validator::replacer('emptyArray', function ($message, $attribute, $rule, $parameters) {
            return 'You need to fill up at least one field for '.$attribute;
        

        它会检查数组字段是否为空。

        【讨论】:

          猜你喜欢
          • 2014-06-17
          • 2020-08-20
          • 1970-01-01
          • 2023-03-10
          • 2011-07-21
          • 1970-01-01
          • 1970-01-01
          • 2022-12-08
          • 2016-06-29
          相关资源
          最近更新 更多