【问题标题】:Creating form arrays with Laravel 4使用 Laravel 4 创建表单数组
【发布时间】:2014-09-06 19:20:59
【问题描述】:

在 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 抛出了一个异常。

错误异常

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

即使我只有 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 中是否有任何内置方式来处理这些情况下的输入数组?

【问题讨论】:

  • I have tried to do this, and I got this error 你到底尝试了什么?我可以看到预期的输出,但您是如何尝试实现的?
  • 正如所写。我添加了一组文本字段,它们是数组“option []”,当对“return Redirect::back()->withErrors($validator)->withInput(Input::all());”做出反应时,这些字段不仅没有被填充,而且 Laravel 抛出了一个错误。我不确定你错过了什么。我把所有相关代码放在那里...

标签: arrays forms laravel laravel-4


【解决方案1】:

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

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

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

【讨论】:

  • 是的。我知道我可以在名字上写任何我想要的。但是当我返回错误时,它仍然会给我一个错误。
猜你喜欢
  • 1970-01-01
  • 2015-01-27
  • 2014-11-20
  • 2014-10-06
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多