2015-04-01 111 views
4

所以我正在管理界面。我有一個路線設置像這樣:使用Laravel 5與其他參數的方法注入

Route::controllers([ 
    'admin' => 'AdminController', 
]); 

然後我有一些方法的控制器:

public function getEditUser($user_id = null) 
{ 
    // Get user from database and return view 
} 

public function postEditUser($user_id = 0, EditUserRequest $request) 
{ 
    // Process any changes made 
} 

正如你所看到的,我使用的方法注入驗證用戶輸入的,所以URL的外觀如下:

http://example.com/admin/edit-user/8697 

GET請求將轉到GET方法和POST方法的POST請求。問題是,如果我創建一個新用戶,也不會有一個ID:

http://examplecom/admin/edit-user/ 

然後我得到一個錯誤(轉述):

參數2傳遞給控制器​​必須EditUserRequest的實例,沒有給出

所以現在我傳遞的0的ID,使其用於創建新用戶的工作,但這個程序是剛剛起步,所以我要去必須做這貫穿整個應用程序?有沒有更好的方法來傳遞驗證方法和參數?任何智慧將不勝感激。

+0

您應該爲創建用戶創建另一種方法。 PUT應該用於更新,而POST應該用於創建:'putEditUser'和'postCreateUser' – 2015-04-01 19:29:55

+1

如果您顛倒了順序呢? 'postEditUser(EditUserRequest $ request,$ user_id = null)' – lukasgeiter 2015-04-01 20:50:56

+0

@lukasgeiter呵呵,我以爲我已經試過了,但它的功能就像一個魅力(顛倒了順序)。發佈作爲答案,我會接受它。另外,我正在使用的另一種方法是僅將user_id作爲隱藏字段傳遞,並且POST方法中沒有user_id參數。 – 2015-04-01 21:13:37

回答

2

你可以扭轉你的參數的順序,以便可選一個是結尾:

public function postEditUser(EditUserRequest $request, $user_id = null) 
{ 

} 

然後Laravel將解決EditUserRequest第一,並通過此而已,如果沒有USER_ID所以默認值將踢

相關問題