Laravel 5:请求验证多维数组

时间:2015-08-19 09:57:56

标签: arrays validation laravel multidimensional-array request

我有提交多维数组的表单。 像:

slide[1][title]
slide[2][title]

现在我使用Request类来定义规则。 如何遍历此类中的所有数组项。 我试过了:

public function rules()
{
    return [
        'id' => 'required',
        'slide' => 'array|min:1',
        'slide.*.title' => 'required|max:255',
        'slide.*.description' => 'required|max:255',
    ];
}

但它不起作用。

3 个答案:

答案 0 :(得分:8)

  

免责声明:此解决方案已在Alexej的问题中发布。由于答案不应该在问题正文中分享,并且OP似乎不活跃,我会将其答案作为社区维基重新发布给未来的读者:

我通过获取幻灯片数组并通过它来找到解决方案。

public function rules()
{
    $rules = [
        'id' => 'required',
        'slide' => 'array|min:1',
    ];
    foreach($this->request->get('slide') as $key => $val){
        $rules['slide.'.$key.'.title'] = 'required|max:255';
        $rules['slide.'.$key.'.description'] = 'required|max:255';
    }
    return $rules;
}

答案 1 :(得分:1)

现在有一种更好的方法。我不确定确切的最低版本的Laravel是否支持此功能,但我正在运行5.5,并且此方法有效。

假设您有以下请求数据:

index:0
is_required:1
type:select
name:favorite color
title:What is your favorite color?
meta[0][key]:subtitle
meta[0][value]:If you have multiple favorites, pick your favorite-favorite.
meta[1][key]:default_value
meta[1][value]:Pink
options[0][index]:0
options[0][value]:Red
options[1][index]:3
options[1][value]:Pink
options[2][index]:1
options[2][value]:Blue
options[3][index]:2
options[3][value]:Green

您的验证规则如下:

return [
    'index' => 'required|integer|min:0',
    'is_required' => 'required|boolean',
    'type' => [
        'required',
        Rule::in($this->types_enum)
    ],
    'name' => 'required|string|max:64',
    'meta' => 'sometimes|array',
    'meta.*.key' => 'required|string|max:64',
    'meta.*.value' => 'required|string',
    'options' => 'sometimes|array',
    'options.*.index' => 'required|integer|min:0',
    'options.*.value' => 'required|string',
];

请注意,技巧只是使用带点符号的通配符(*)来表示数组项本身的索引值。

答案 2 :(得分:0)

多维数组没有预先配置的验证规则。最简单的方法是在控制器内进行数组验证。

问题是当你使用多维数组存储单个值时,逻辑是错误的,你应该修复的是你的逻辑,而不是框架。

例如,我看到很多时间发送用户凭据,如$ var ['login'] ['pass']和$ var ['login'] ['username'],它可以轻松转换为2不同的变量,这将更有意义。

如果您知道这些值应该是什么,并且您确信验证可能是所有不同值的通用验证,您可以创建自定义验证器(读取laravel版本的验证文档)。

参考你的代码我认为多维数组的声明方式与你的html slide[]['title']相同。知道如何将这些参数发送到后端是有益的,然后能够为您提供有关如何设置验证的线索。