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 является строкой, заданный массив (View: /home/dbugger/laravelproject/app/views/polls/create.blade.php)

Я подозреваю, это потому, что я использую элемент формы массива , но я не уверен, почему и как, поскольку в настоящее время я даже не пытаюсь повторно заполнить форму с помощью (неудавшихся) представленных данных …

Для сгруппированных входов, таких как 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()); 

{{Форма :: текст ('option []', null, ['class' => 'option', 'placeholder' => 'Test option'])}} в том, как вы назвали опцию текстового поля [] …