Laravel 4 - 在失败的提交中发回输入

时间:2014-07-15 21:17:43

标签: php forms laravel laravel-4

我有这个表格

@extends('index')

@section('main')
    <h1>Create a new poll</h1>
    {{ Form::model(new Poll, ['route' => 'polls.store', 'class' => 'create-poll']) }}
        <div class="gray-box">
            {{ Form::label("topic", "Write your poll question") }}
            {{ Form::text('topic', '', ['placeholder' => 'Example: What is the best number?', 'id' => 'topic']) }}
        </div>

        <div class="gray-box">
            {{ Form::label(null, "Write the possible answers") }}
            {{ Form::text('option[]', null, ['class' => 'option', 'placeholder' => 'Test option']) }}

            <input type="button" class="more-options" value="Add another option">
            {{-- This will create another option[] input element --}}

        </div>

        {{ Form::submit() }}
    {{ Form::close() }}
@stop

还有更多,但这是重要的部分。基本上它是一个民意调查名称。它有一个主题和至少一个选项。单击按钮,您可以添加更多选项。

这是控制器:

public function store() {
    $data = Input::all();

    // Validate input
    $validator = Validator::make($data, Poll::$rules);
    if ($validator->fails())
        return Redirect::back()->withErrors($validator)->withInput();

    ...

这里的问题是WithInput()会抛出错误:

  

ErrorException

     

htmlentities()期望参数1为字符串,给定数组(查看:/home/dbugger/laravelproject/app/views/polls/create.blade.php)

我怀疑是因为我使用数组表单元素,但我不知道为什么或如何,因为当时我甚至没有尝试重新填写表单(失败)提交数据......

2 个答案:

答案 0 :(得分:1)

对于Form::text('option[]')...Form::checkbox('options[]')...等分组输入,您需要在控制器中重新排列已发布的数组:

类似的东西:

$optionsInput = Input::get('option');

if(is_array($optionsInput)) {
   // process your options, eg like this
   foreach($optionsInput as $key => $input) {
        $proceededOptionsArray[$key] = $input;
   }
}

数组输入的相同规则适用于验证器,然后:

// return it with other `Input`

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

答案 1 :(得分:0)

{{Form :: text(&#39; option []&#39;,null,[&#39; class&#39; =&gt;&#39;选项&#39;,&#39;占位符& #39; =&gt;&#39;测试选项&#39;])}} 它就像你命名文本字段选项[] ...

一样