2014-07-16 65 views
0

創建形式陣列在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[]" /> 

我提交表單,明知會失敗,看看,當形式再次出現,對這些字段的值仍然存在。相反,拉拉維爾拋出了一個例外。

ErrorException

htmlentities() expects parameter 1 to be string, array given

即使我剛1個選項,它仍然給了我同樣的錯誤:

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

現在,我知道我可以手動處理陣列選項的填充,也許像這個:

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

然後只是循環訪問刀片模板上的$ option數組。

是的,這可能會起作用。但這有點不好意思,它仍然錯過了Laravel在失敗提交後自動填充字段的強大工作流程,就像我回到title一樣。所以我的問題是:

在這些情況下,Laravel 4有沒有內置的方法來處理輸入數組?

+0

'我試圖做到這一點,我得到這個error'你是怎麼試試到底是什麼?我可以看到預期的輸出結果,但您是如何嘗試並實施它的? –

+0

正如書面。我添加了一組文本字段,它們是數組「選項[]」,並且在對「返回Redirect :: back() - > withErrors($ validator) - > withInput(Input :: all());」作出反應時,這些字段不僅沒有被填充,而且Laravel也報錯了。我不知道你錯過了什麼。我把所有相關的代碼放在那裏...... –

回答

0

如果添加一個索引來就像每個輸入:

{{ Form::text('option[1]') }} {{ Form::text('option[2]') }}它會奏效。

你可以看到這是如何工作的vendor\laravel\framework\src\Illuminate\Html\FormBuilder.php在創建該輸入功能

+0

是的。我知道我可以放任何我想要的名字。但是當我返回一個錯誤時,它仍然會給我一個錯誤。 –