使用L4验证器的嵌套输入

时间:2013-05-29 16:59:36

标签: php laravel laravel-4

有没有人知道如何使用Laravel 4验证器验证嵌套输入集?

我有一个包含一组订单项的表格,每个数量字段在名称的方括号中都有唯一的包ID:

<input type="text" name="quantity[package_one]" />
<input type="text" name="quantity[package_two]" />

这导致嵌套的输入数组:

<?php

array(
  'quantity' => array(
    'package_one' => 3,
    'package_two' => 12
  )
);

这正是我想要的,但我不确定如何使用验证器类为这些项目指定规则:

// Does not work :-(
Validator::make(Input::all(), array(
    'quantity[package_one]' => 'numeric|required|min:1',
    'quantity[package_two]' => 'numeric|required|min:1'
));

这似乎不起作用,也没有将规则嵌套在quantity下。显然有一些解决方法,比如在将它传递给验证器等之前自己构建一个自定义输入数组,但我想知道的是:

是否存在处理嵌套输入的原生“Laravel”方法?

提前致谢, 丹。

2 个答案:

答案 0 :(得分:0)

肮脏的方式......

控制器

$input = Input::all();
$input = array_merge($input, $input['quantity']);
Validator::make(Input::all(), array(
'package_one' => 'numeric|required|min:1',
'package_two' => 'numeric|required|min:1'
 ));

Validator不会查看嵌套数组。只需将该数组带到外部数组即可完成。 (如果你愿意,你可以取消设置$input['quntity']

这里的漏洞是,假设数组中存在$input['quantity']。您需要在进行验证之前验证这一点。

工作但效率不高。

答案 1 :(得分:0)

您可以为数量输入创建额外的Validator对象。它需要更多的代码,但我认为它比合并到一个数组

更强大