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

Posted

技术标签:

【中文标题】Laravel 4 - 同一页面上有多个表单?【英文标题】:Laravel 4 - Multiple forms on same page? 【发布时间】:2013-06-24 15:56:57 【问题描述】:

我在 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>

所以基本上,同一页面上的两个单独的表单发布到同一控制器中的两个单独的方法 - 当方法成功时,它将它们重定向回“设置”。我不会发布这些方法,因为测试它们并且它们有效,我相信问题出在路由文件中:

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].

我猜是因为选项形式首先出现。如果我取出开放表单刀片代码(两者都适用),它会加载页面 - 但显然表单没有做任何事情。

任何帮助都会很好!提前致谢。

【问题讨论】:

【参考方案1】:

我的替代解决方案是在每个表单中创建一个隐藏的 html 输入,并让控制器根据该字段识别提交的内容。所以,你可以只用一条路线。

【讨论】:

【参考方案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);

【讨论】:

以上是关于Laravel 4 - 同一页面上有多个表单?的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中从同一网页发布两个表单

使用 Laravel 测试两个具有相同输入名称的表单

页面中所有表单的 Laravel 5 CSRF 全局令牌隐藏字段

CreateView 中的多个表单和表单集

使用flask和WTForms在一个页面中的多个表单

Laravel 5.2 在同一页面上登录和注册表单