【问题标题】:Laravel form array validation doesn't workLaravel 表单数组验证不起作用
【发布时间】:2019-01-24 10:13:02
【问题描述】:

我在使用 Laravel 5.1 验证数组时遇到问题。

HTML 代码:

{!! Form::label('information[1][color]', 'Color') !!}
{!! Form::select('information[1][color]', [null => 'Choose your color'] + $product->availableColors()->toArray() , null, ['id' => 'select-color0', 'data-id' => $product->id, 'class' => 'form-control', 'required' => 'required']) !!}

测试数据是否正确传递:

dd($request->all):

"information" => array:1 [▼
    1 => array:1 [▼
      "color" => "2"
    ]
  ]

验证码:

public function store(Request $request)
    {
        $rules = [
            'information.*.color' => 'required'
        ];

        $validator = Validator::make(Input::all(), $rules);

        if($validator->fails()){
            dd('Validation fails');
            return Redirect::to('index')->withErrors($validator);
        } else {
            ..........

我一直在dd('Validation fails') 的页面结束。有人可以向我解释我在这里缺少什么以及为什么验证不起作用吗?我正在尝试遵循本教程:https://mattstauffer.com/blog/form-array-validation-in-laravel-5-2/

我也试过了:

$validator = Validator::make($request->all(), [
    'information' => 'required',
    'information.*.color' => 'required'
]);

但验证仍然失败

还尝试更改表单名称:

{!! Form::select('information[][color]', [null => 'Choose your color'] + $product->availableColors()->toArray() , null, ['id' => 'select-color0', 'data-id' => $product->id, 'class' => 'form-control', 'required' => 'required']) !!}

但还是没有运气

【问题讨论】:

  • 能否请您也添加输出?
  • 你应该尝试 $request 而不是 Input。

标签: php laravel


【解决方案1】:

解决方案:

$rules = [
        'id' => 'required',
        'name' => 'required|string',
        'information' => 'required|array'
    ];

    foreach ($request->information as $key => $variant) {
        foreach($variant as $color){
            $rules['information.'.$key.'.color'] = 'required';
        }
    }

    $validator = Validator::make($request->all(), $rules);

【讨论】:

  • 我仍然认为 'information' => 'required|array' 与优雅的方式相冲突,可能不需要……但无论如何,你解决了它很好!
【解决方案2】:

从选择名称中删除 1

{!! Form::select('information[][color]', array_merge([null => 'Choose your color'],$product->availableColors()->toArray()) , null, ['id' => 'select-color0', 'data-id' => $product->id, 'class' => 'form-control', 'required' => 'required']) !!}

或将您的规则更改为

$rules = [
            'information.1.color' => 'required'
        ];

【讨论】:

  • 这也不是问题,因为您可以从dd($request->all()) 看到,值被正确传递。不知何故,验证不适用于数组。
  • 现在更新,这是一个不同的点,实际上更接近问题所在
  • @lagbox 也许你可以帮助回答这个问题,而不是只说哪里出了问题!
  • @madalinivascu 感谢您提供更新的建议。我认为这确实更接近于解决问题。形式是动态的。因此用户可以添加另一个颜色输入表单。我目前正在努力验证一种颜色是否可以工作。
  • @AnnaJeanine 您是通过 ajax 还是通过输入表单提交表单?您在表单上还有其他输入吗?
猜你喜欢
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 2021-12-01
  • 2018-07-26
  • 2016-12-21
  • 1970-01-01
相关资源
最近更新 更多