Laravel 4 - 同一页面上的多个表单?

5

我在Laravel 4中的表单处理有些奇怪的行为。我有一个名为“设置(settings)”的页面,其中包含两个表单,每个表单都会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>

基本上,同一页上有两个单独的表单,它们分别提交到同一个控制器中的两个不同方法 - 当方法成功时,将它们重定向回“设置”。我不会发布这些方法,因为我已经测试过它们并且它们有效,我相信问题在路由文件中:
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].

由于选项表单出现在前面,我猜测如果我将开放式表单的代码删除(针对两者),页面会加载 - 但显然该表单不起作用。

希望能得到任何帮助!提前感谢。

2个回答

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);
}

0
我的替代方案是在每个表单中创建一个隐藏的HTML输入,并使控制器根据此字段识别提交的目的。因此,您可以仅使用一个路由来处理两者。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接