我在Laravel 4中的表单有一些奇怪的行为。我有一个“设置”页面,有两个表单,每个(应该)POST到控制器方法,更新数据库并返回到设置页面。但是,似乎存在问题,无论是我的表单工作方式还是我的路线。
这是怎样的,简化:
设置页面:(site.com/settings)
<div id="form-one" class="form-area">
{{ Form::open(array('action' => 'SettingController@editOption')) }}
{{ Form::text('optionvalue', 'Default')) }}
{{ Form::submit('Save Changes') }}
{{ Form::close() }}
</div>
<div id="form-two" class="form-area">
{{ Form::open(array('action' => 'SettingController@editPage')) }}
{{ Form::text('pagevalue', 'Default')) }}
{{ Form::submit('Save Changes') }}
{{ Form::close() }}
</div>
基本上,同一页面上的两个单独的表单会发布到同一个Controller中的两个单独的方法 - 当方法成功时,它会将它们重定向回“settings”。我不会发布方法,因为测试它们并且它们有效,我相信问题出在routes文件中:
routes.php文件
// Checks if a session is active
Route::group(array('before' => 'require_login'), function()
{
Route::group(array('prefix' => 'settings'), function()
{
Route::get('/', 'SettingController@index');
Route::post('/', 'SettingController@editOption');
Route::post('/', 'SettingController@editPage');
});
});
现在我很确定它不喜欢这两个POST路由,但我想不出另一种方法,因为表单在同一页面上。我收到错误:
Unknown action [SettingController@editOption].
由于选项表格首先出现,我猜。如果我将开放式刀片代码输出(两者都有),它会加载页面 - 但显然表单没有做任何事情。
任何帮助都会很好!提前谢谢。
答案 0 :(得分:2)
您不能为不同的操作添加两个相同的路由,因为它们将被传递到第一个匹配的路由,在您的情况下传递给SettingController@editOption
。将您的路线更改为:
Route::post('/option', 'SettingController@editOption');
Route::post('/page', 'SettingController@editPage');
与这两项操作相比,您可以重定向到“/”:return Redirect::back()
,如果发生错误:
if ($validation->fails())
{
return Redirect::to('/settings')->with_errors($validation);
}
答案 1 :(得分:0)
我的另一种解决方案是在每个表单中创建一个隐藏的html输入,并使控制器根据此字段确定提交的内容。所以,你可以只使用一条路线。