2015-10-04 28 views
0

我想有一個控制器處理URL像.../item/list和.../item/list/5。 第一個將顯示所有項目,第二個將顯示項其作者具有ID = 5Laravel控制器方法的路由器與一個可選參數

public function getList($userid) { 
    $items = \DB::table('items')->get(); 
    if ($userid) $items = \DB::table('items')->where('user_id', '=', $userid)->get(); 
    foreach ($items as $item) { 
     // ... 
    } 
} 

URL等.../item有一個參數丟失。 有沒有辦法解決這個問題?

回答

0

我覺得你的路線是這樣的:如果沒有ID

Route::get('item/{userid}', '[email protected]'); 

但會發生什麼? 讓我們改變你的邏輯: 如果URL中有一個userId,然後顯示用戶的項目。如果沒有id顯示全部。

因此改變你的路線:

Route::get('item/{userid?}', '[email protected]'); 

,也是你的函數:

public function getList($userid = null) { 
    $items = \DB::table('items')->get(); 
    if ($userid) $items = \DB::table('items')->where('user_id', '=', $userid)->get(); 
    foreach ($items as $item) { 
     // ... 
    } 
} 
0

創建可選參數的路線

Route::get('item/list/{userid}', '[email protected]'); 

然後在你的變化而變化userid有默認參數值

public function getList($userid = '') { 
    $query = \DB::table('items'); 
    if ($userid) { 
     $query->where('user_id', '=', $userid); 
    } 
    $items = $query->get(); 
    foreach ($items as $item) { 
     // ... 
    } 
}