使用参数调用控制器?

Call a controller with a parameter?

假设我有两个模型:

  1. 用户列表User
  2. 弹珠列表 Marble 属于一个 User

我想用 api/marbles 获取所有现有的弹珠,并且只用 api/user/marbles 获取我的弹珠。这个想法是为了避免像 api/marbles?owned=true

这样命名的路线

在我的 API 路线中我有这个:

Route::get('marbles', 'MarbleController@index');
Route::get('user/marbles', 'MarbleController@index(true)');

然后在我的 MarbleController 中:

class MarbleControllerextends Controller
{
    function index($owned = false) {
        return $owned ? Marble::where('user_id', Auth::id())->get() : Marble::all();
    }
}

不幸的是,MarbleController@index(true) 并没有真正起作用,因为 (true) 不会被 Laravel 接受,不会填充可选的 $owned 变量。

有没有办法避免定义一个新的方法,比如Route::get('user/marbles', 'MarbleController@owned');

    function owned() {
        return $this->index(true);
    }
Route::get('marbles/{me?}', 'MarbleController@index'); will work fine.

这里me是可选参数。如果省略它,它将采用 false 否则 true 作为它的值。