代码之家  ›  专栏  ›  技术社区  ›  eithed

数组验证

  •  1
  • eithed  · 技术社区  · 6 年前

    我正在尝试为以下请求创建验证-传递给给定端点的数据需要是一个数组数组,其中每个内部数组都包含 line1 postcode 外阵列的大小是 min:1 . 例如:

    [
       ['line1' => 'foo', 'postcode' => 'bar'],
       ['line1' => 'baz', 'postcode' => 'qux']
    ]
    

    是我的请求的有效数据,并且:

    [
       ['line1' => 'foo', 'postcode' => 'bar'],
       ['line1' => 'baz']
    ]
    

    不是。

    我用以下规则创建了一个请求验证类:

    public function rules()
    {
        return [
            '*.line1' => 'string|required',
            '*.postcode' => 'string|required',
        ];
    }
    

    但是我不知道如何添加最小要求。既不 '*' => 'min:1' 也不 '' => 'min:1' 工作(我想第一个 应该 理论上可行,但我认为它检查每个字段的长度是否为1)

    1 回复  |  直到 6 年前
        1
  •  1
  •   lufc    6 年前

    理想情况下,您可以添加一个密钥,即

    [ 'items' => [
           ['line1' => 'foo', 'postcode' => 'bar'],
           ['line1' => 'baz', 'postcode' => 'qux']
        ]
    ]
    

    然后使用 'items' => 'required|min:1' .

    如果这不可能,你能加一个 after() method 根据您的要求(我还没有这样做,所以不确定它是否有效):

    public function withValidator($validator)
    {
        $validator->after(function ($validator) {
            if (count($validator->getData())<1) {
                $validator->errors()->add('input', 'There must be at least one input');
            }
        });
    }
    
    推荐文章