验证Laravel中的未知输入字段

时间:2015-01-15 18:27:57

标签: php validation laravel laravel-4

我无法理解如何验证我创建的表单。我的表格看起来像这样:

<input id="box-1-nickname" name="box-1-nickname" class="form-control" type="text" placeholder="Required">

<select id="box-1-destination" name="box-1-destination" class="form-control">
    <option value="store">Storage Facility</option>
    <option value="ship">Ship</option>
</select>

<input class="box-height form-control" id="box-1-height" name="box-1-height" type="number" placeholder="in Inches">
<input class="box-width form-control" id="box-1-width" name="box-1-width" type="number" placeholder="in Inches">
<input class="box-depth form-control" id="box-1-depth" name="box-1-depth" type="number" placeholder="in Inches">
<input class="box-weight form-control" id="box-1-weight" name="box-1-weight" type="number" placeholder="in Pounds">

<label class="radio-inline">
    <input id="box-1-size-retail" name="box-1-size" type="radio" value="retail" checked>
    Retail box (18" x 18" x 22")
</label>
<label class="radio-inline">
    <input id="box-1-size-custom" name="box-1-size" type="radio" value="custom">
    I'll use my own box
</label>

使部分复杂化的部分是这样一个事实:用户可以“添加一个框”,它将复制这些表单字段并将框ID增加1.添加/删除几个框并提交表单{{ 1}}可能会回来看起来像这样:

Input::all()

我很难找到验证这些盒子输入的方法,因为我真的不知道会提交多少个盒子字段或者它们的输入名称是什么。任何建议都会非常受欢迎。

1 个答案:

答案 0 :(得分:4)

更改输入变量的名称可能就是这里的方法。而不是box-1-...box-2-...等,为什么不有这样的名字:

name="box-nickname[]"
name="box-destination[]"
name="box-height[]"
name="box-width[]"
name="box-depth[]"
name="box-weight[]"

如果您将其中2个发送到服务器,则调用Input::all()将如下所示:

'box-nickname' => array(
  "0" => "Value of Box Nickname 1",
  "1" => "Value of Box Nickname 2",
  ...),
'box-destination' => array(
  "0" => "Value of Box Destination 1",
 ... 

你明白了吗?验证这一点变得简单,只需要将规则应用于每个值数组,而不是每个数字框都应用:

$rules = array(
  "box-nickname" => "Required|Max:6",
  "box-destination" => "Required|Numeric"
  ...
);

您可以将规则更改为您想要的任何内容。唯一困难的部分是在重定向回页面时显示验证器消息。因此,我还建议将其与客户端验证配对,客户端验证在使用Redirect::to()->withInput()->withErrors($validator)时比Laravel更好地处理动态生成的输入。

希望能为您的问题提供一些见解!