2014-07-23 113 views
1

所以我有一個選擇框,它提供了一個下拉菜單,可以從下拉菜單給消息提供管理器。它接受輸入,然後更改爲數據庫中名爲manager的列中相應的列。當我嘗試提交選擇菜單時,它給了我Laravel的常規錯誤。但是,當我在最後提交?debug = 1時,它會提交,但是會給行的管理器列賦予一個空白值。Laravel在調試模式下提交,但在正常模式下不能正常工作

以下是我在routes.php文件

Route::get('foo/{id}', '[email protected]'); 
Route::post('foo/{id}', '[email protected]'); 

這是形式。

{{ Form::open(array('url' => '/admin/foo' . $message->id)) }} 
{{ Form::select('handler[]', array('unassigned', 'foo', 'bar'), null, array('style' => 'width: 127px')); }} 
{{ Form::submit('Change manager') }} 
{{ Form::close() }} 
{{ $message->manager }} 

,這裏是什麼在FooController的

public function bar($id = null) 
{ 
    $message = Message::find($id); 
    $handler = Input::get('handler[]'); 
    $message->manager = $handler; 
    $message->save(); 
    return Redirect::action('[email protected]_bar'); 
} 

我有這樣一個問題,有一天,我有零回憶我所做的。我非常感謝任何幫助,謝謝!該數據庫是postgresql,如果這是任何幫助

+1

出於好奇:你從哪兒得到'調試= 1'?官方文檔? – zwacky

+0

您是否嘗試過沒有處理程序的數組形式?即只使用'{{Form :: select('handler',...)}}'和Input :: get('handler')'? – Mephoros

+0

'?debug = 1'確實不*使應用程序進入調試模式。 – Laurence

回答

0

嘗試一個dd(Input::all())在你的控制器的開始,並確保你看到你的期望。

此外,由於您要發送數組,因此您可能必須執行Input::get('handler.0') - 請參閱Input :: only()和Input :: except()代碼塊下方的here

0

這似乎是因爲你命名你的選擇handler[],PHP是抓住它作爲數組的一部分。

當設置你的消息模型,試試這個...

public function bar($id = null) 
{ 
    $message = Message::find($id); 
    $handler = Input::get('handler[]'); 
    $message->manager = $handler[0]; 
    $message->save(); 
    return Redirect::action('[email protected]_bar'); 
} 

通常情況下,你只在你的形式,當你接受像複選框多個值固定後用[]使用的名稱/多選擇等......否則,最好堅持不使用它,因爲這可能會導致混淆。

+0

這仍然無法正常工作。我也試過只用處理程序。我知道在它突出顯示它是$ message-> manager = $ handler的行之前,它已經到了這個地步了 – JoeCo

0

我設法通過將方法更改爲PUT,以幾乎令人沮喪的簡單方式修復它。

這樣

Form::open(array('url' => 'foo/bar', 'method' => 'put')) 
相關問題