Laravel 4 RESTful API - Resource Controller语言 - 更深的请求层次结构



我正在构建API系统的前端部分。使用 Laravel 的默认资源控制器,可以实现此类请求:

http://superapi.com/v1/soccer/10

这将调用:/app/controllers/SoccerController.php @ show($id) 方法

我至少需要再深一个深度,才能做到这样:

http://superapi.com/v1/soccer/player/10

因此,它将解决:

/

app/controllers/SoccerController.php @ show() 方法同时具有 "player" 和 "10" 参数。

public function show($model)
{
    return Response::json(array('success' => true, 'message' => 'Test ' . $model));
}

Laravel只将1个参数传递给方法,我找不到有关如何传递更多参数的任何内容。

我这样做基本上是因为我的 1 个控制器负责与几个模型交谈,而不仅仅是一个模型。无论是足球运动员还是足球队或足球时间表,这一切都应该很好地放在下面 /v1/<controller>/<type>/<id>

建议?

谢谢!

无论如何,您可以通过在资源路由之前放置自定义路由来两全其美:

Route::get('soccer', 'SoccerController@show');
Route::resource('soccer', 'SoccerController', array('except' => array('show')));

现在,show() 方法将从资源控制器控件中排除(因此调用soccer/10soccer/player将导致NotFoundHttpException),并放入自定义路由中。不过,您需要编辑 show() 方法以接受第二个参数:

public function show($type, $id)
{
}
您可以使用

路由前缀

Route::group(array('prefix' => 'soccer'), function()
{
    Route::resource('player', 'PlayerController');
});

然后,您可以将所有足球相关控制器放在相同的命名空间(和同一文件夹中),例如 Soccer . 在这种情况下,请将上述路由更改为

Route::resource('player', 'SoccerPlayerController');

最新更新