2014-07-23 75 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')) 
相关问题