具有可选参数的路由器Laravel控制器方法

具有可选参数的路由器Laravel控制器方法,laravel,laravel-5,Laravel,Laravel 5,我想要一个控制器来处理像…/item/list和…/item/list/5这样的url。 第一个将显示所有项目,第二个将显示其作者ID为5的项目 public function getList($userid) { $items = \DB::table('items')->get(); if ($userid) $items = \DB::table('items')->where('user_id', '=', $userid)->get(); fo

我想要一个控制器来处理像…/item/list和…/item/list/5这样的url。 第一个将显示所有项目,第二个将显示其作者ID为5的项目

public function getList($userid) {
    $items = \DB::table('items')->get();
    if ($userid) $items = \DB::table('items')->where('user_id', '=', $userid)->get();
    foreach ($items as $item) {
        // ...
    }
}
类似于
../item
的URL缺少参数。
有办法解决这个问题吗?

我想你的路线是这样的:

Route::get('item/{userid}', 'MyController@getList');
但是如果没有身份证怎么办? 让我们像这样改变你的逻辑: 如果url中有用户ID,则显示用户的项目。如果没有id,则显示所有

因此,改变你的路线:

Route::get('item/{userid?}', 'MyController@getList');
还有你的功能:

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) {
        // ...
    }
}

使用可选参数创建管线

Route::get('item/list/{userid}', 'MyController@getList');
然后在函数中更改
userid
,使其具有默认参数值

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