2013-06-27 61 views
5

我在Laravel 4中有一些奇怪的行爲。我有一個帶兩種形式的「設置」頁面,每個(應該)POST到控制器方法,更新數據庫並返回到設置頁面。然而,似乎有一個問題,無論是我的表單工作方式還是我的路線。Laravel 4 - 在同一頁上有多種形式?

下面是它是如何簡化:

設置頁面:(site.com/settings)

<div id="form-one" class="form-area"> 

{{ Form::open(array('action' => '[email protected]')) }} 
    {{ Form::text('optionvalue', 'Default')) }} 
    {{ Form::submit('Save Changes') }} 
{{ Form::close() }} 

</div> 

<div id="form-two" class="form-area"> 

{{ Form::open(array('action' => '[email protected]')) }} 
    {{ 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('/', '[email protected]'); 
     Route::post('/', '[email protected]editOption'); 
     Route::post('/', '[email protected]'); 

    }); 
}); 

現在我敢肯定它不喜歡兩條郵政路線就是這樣,但我想不到另一種方式來做到這一點,因爲表格在同一頁面上。我得到的錯誤:

Unknown action [[email protected]]. 

由於選項表格首先我猜。如果我將開放式刀片代碼(對於兩者)取出,它會加載頁面 - 但顯然,表單不會執行任何操作。

任何幫助將是很好的!提前致謝。

回答

2

對於不同的操作,您不能添加兩條相同的路由,因爲它們將傳遞給第一條匹配的路由,並且在您的情況下傳遞給[email protected]。您的路線更改爲:

Route::post('/option', '[email protected]'); 
    Route::post('/page', '[email protected]'); 

比這兩個動作可以重定向到「/」:return Redirect::back(),並且如果發生錯誤:

if ($validation->fails()) 
{ 
    return Redirect::to('/settings')->with_errors($validation); 
} 
0

我對這種替代解決方案是創建一個隱藏的HTML輸入每個表格並使控制器識別在該字段中提交的內容。所以,餘可以只用一條路線。

相關問題