2014-06-06 68 views
1

我已經使用laravel的表單模型綁定創建了一個表單。Laravel:表單模型綁定到帶有選項的輸入

在表單中,我創建了顯示模型信息所需的表單字段。當寫出來的最小結構填充一切正常:

{{ Form::model($user, array('route' => array('users.update', $user->id), 'method' => 'put')) }} 

    {{ Form::label('first_name', "First Name")}} 
    {{ Form::text('first_name')}} 
... 

這種方式設置,頁面加載時,就像我期望/想讓它從我的模型first_name值自動填充。

當我嘗試指定文本輸入的選項時,問題就出現了。我使用bootstrap,所以我想添加一個form-control類,我還想在輸入字段中佔位符。要做到這一點,我定義我的文字輸入像這樣:

{{ Form::text('first_name', array('placeholder' => "e.g. Zoe", 'class' => 'form-control'))}} 

注意,對於文本值的第二個參數是空的。這是因爲我希望通過模型綁定輸入,而不必添加類似$user->first_name之類的內容,因爲那麼模型綁定有什麼意義呢?

如果我離開它這樣,我得到一個錯誤,因爲Form::text()expects a string for the value,但如果我輸入類似修復:

{{ Form::text('first_name', '', array('placeholder' => "e.g. Zoe", 'class' => 'form-control'))}} 

然後我得到一個空值,因爲我給它一個空字符串。

有沒有一種方法可以在laravel中使用表單模型綁定來填充值,並仍然傳遞選項數組中的佔位符和類定義?

回答

3

你只是需要把Input::old()有:

{{ Form::text('first_name', Input::old('first_name'), array('placeholder' => "e.g. Zoe", 'class' => 'form-control'))}} 

那麼什麼情況是:

  1. Laravel查找任何舊的輸入,它將作爲第一個選項使用(重新填充你的如果存在驗證錯誤,則與輸入數據一起形成

  2. 如果沒有找到舊的輸入,則將返回到模態數據

+0

完美。也感謝您解釋背後的細節! –

+0

在我的情況下,我不想顯示舊的輸入值。所以我用null替換了Input :: old()。它工作.. – Zohaib

+0

在Laravel 5中,'$ user-> first_name'與默認值'Input :: old('first_name')'的行爲完全相同。那有什麼意義呢?但是,當我必須自己設置默認值時,表單模型綁定不會節省我的工作量。 – halloei