2017-09-26 185 views
0

假設以下路線在Laravel 5.5 API:如何將不帶參數的Laravel路由重定向到具有默認參數的控制器方法?

// custom routes for THIS user (the user making the request) 
Route::get('/user', '[email protected]'); 
Route::get('/user/edit', '[email protected]'); 

// register CRUDdy resource routes for users 
Route::resource('users', 'UserController'); 

讓我們用edit爲例:

public function edit(User $user) 
{ 
    ... 
} 

正如你所看到的,編輯路由包含類型暗示$user參數。正如預期的那樣,這對users/13/edit路線很好。但是,我會配置路徑/user/edit以將$request->user()用戶對象傳遞給該函數。我不想檢查中的用戶對象實際的edit方法,因爲這可能會干擾其他驗證(例如,如果有人傳遞不存在的用戶ID,我不想默認當前用戶,我想在這種情況下返回一個錯誤)。

總之:如何註冊一個路由來首先創建一個參數,然後將它傳遞給給定的控制器方法?我首先想到的是使用一個封閉:

Route::get('/user/edit', function(Request $request){ 
    $user = $request->user(); 
}); 

但一旦瓶蓋內,我不能確定如何再進行請求轉發到適當的控制方法。

+0

你確定是由工匠產生這個功能就像使用'--resource'標籤 –

+0

是的,資源路線是由工匠產生的。我想添加額外的路線,就像我在問題中所說的那樣。 – CGriffin

回答

1

您可以創建一個新的控制器方法來取代當前用戶的編輯,而不是閉包。

比方說,你的路線是這樣的:

Route::get('/user/edit', '[email protected]'); 

然後在你的控制器:

public function editSelf(Request $request) 
{ 
    $this->edit($request->user()); 
} 
+0

這似乎是處理場景中最直接,最典型的方式,謝謝! – CGriffin

相關問題