Laravel更多次元数组验证

时间:2018-12-21 07:57:10

标签: laravel

有一个请求。如何验证?我尝试使用foreach,但无法正常工作。谢谢。

请求:

'show_data' => [
                    0 => [
                        'buyer_search_property_id' => 1,
                        'date_of_show' => '2019-01-01',
                        'comment' => 'Nice flat',
                    ],
                    1 => [
                        'buyer_search_property_id' => 2,
                        'date_of_show' => '2019-01-31',
                        'comment' => 'Too small',
                    ], etc... 

                ],

我尝试过此方法,但是它不起作用(当然...:))

public function rules()
    {
        $rules = [];

        foreach ($this['show_data'] as $key => $item) {
            $rules["show_data[$key]['buyer_search_property_id']"] = 'required';
            $rules["show_data[$key]['date_of_show']"] = 'required|date';
            $rules["show_data[$key]['comment']"] = 'required';
        }

        return $rules;
    }

3 个答案:

答案 0 :(得分:0)

这是来自laravel文档:

您还可以验证数组的每个元素。例如,要验证给定数组输入字段中的每个电子邮件都是唯一的,您可以执行以下操作:

<library>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jaxb-api-2.2/${servicemix.specs.version};type:=endorsed</library> 
<library>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jaxp-api-1.4/${servicemix.specs.version};type:=endorsed</library>

了解更多here

答案 1 :(得分:0)

您可以像这样轻松地在laravel中验证数组:

public function rules()
{
    return [
        "show_data.*.buyer_search_propery_id" => "required",
        "show_data.*.date_of_show" => "required|date",
        "show_data.*.comment" => "required",
    ];
}

如果您希望您的方法有效,请执行以下操作:

public function rules()
{
    $rules = [];

    foreach ($this['show_data'] as $key => $item) {
        $rules["show_data.$key.buyer_search_property_id"] = 'required';
        $rules["show_data.key.date_of_show"] = 'required|date';
        $rules["show_data.$key.comment"] = 'required';
    }

    return $rules;
}

只需除去内部方括号和引号,然后在索引中添加点,即可将$rules["show_data[$key]['date_of_show']"]更改为$rules["show_data.$key.date_of_show"]

答案 2 :(得分:0)

    $data['show_data'] = [
            0 => [
                    'buyer_search_property_id' => 1,
                    'date_of_show'             => '2019-01-01',
                    'comment'                  => 'Nice flat',
            ],
            1 => [
                    'buyer_search_property_id' => 2,
                    'date_of_show'             => '2019-01-31',
                    'comment'                  => 'Too small',
            ],

    ];

    $rules = [
            'show_data.*.buyer_search_property_id' => 'required',
            'show_data.*.date_of_show'             => 'required|date',
            'show_data.*.comment'                  => 'required',
    ];

    $validator = Validator::make($data, $rules);

在规则处注意星号。这样,您就不需要foreach循环。而且它看起来和感觉上都干净得多。