使用Laravel 4创建表单数组

时间:2014-07-16 09:58:54

标签: arrays forms laravel laravel-4

在Laravel 4中,我可以使用以下代码创建文本输入:

{{ Form::text('title', '', ['placeholder' => 'Ex. title', 'id' => 'title']) }}

这非常有用,因为如果我的表单的其他字段验证失败,我可以做...

return Redirect::back()->withErrors($validator)->withInput(Input::all());

当表单再次显示时,字段title将保留之前提交的值。

好东西。

现在我的问题是:输入数组怎么样?

我在表单中添加了以下输入字段:

<input type="text" name="option[]" />
<input type="text" name="option[]" />
<input type="text" name="option[]" />
<input type="text" name="option[]" />

我提交了表单,知道会失败,看看表单何时再次显示,这些字段上的值仍然存在。相反,Laravel抛出异常。

  

ErrorException

     

htmlentities()期望参数1为字符串,给定数组

即使我只有一个选项,它仍然会给我同样的错误:

{{ Form::text('option[]') }}

现在,我知道我可以手动处理数组选项的填充,可能是这样的:

$options = Input::get('option');
return Redirect::back()
    ->withErrors($validator)
    ->withInput(Input::except('option'))
    ->with('options', $options);

然后只循环遍历刀片模板上的$ option数组。

是的,这可能会奏效。但这有点像hacky,它仍然错过了Laravel在提交失败后自动填充字段的强大工作流程,就像我回到title一样。所以我的问题是:

在这些情况下,Laravel 4中是否有内置的方法来处理输入数组?

1 个答案:

答案 0 :(得分:0)

如果您为每个输入添加索引,例如:

{{ Form::text('option[1]') }} {{ Form::text('option[2]') }}它会起作用。

您可以在创建输入的函数vendor\laravel\framework\src\Illuminate\Html\FormBuilder.php中查看其工作原理