我正在构建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/10
或soccer/player
将导致NotFoundHttpException
),并放入自定义路由中。不过,您需要编辑 show()
方法以接受第二个参数:
public function show($type, $id)
{
}
路由前缀
Route::group(array('prefix' => 'soccer'), function()
{
Route::resource('player', 'PlayerController');
});
然后,您可以将所有足球相关控制器放在相同的命名空间(和同一文件夹中),例如 Soccer
. 在这种情况下,请将上述路由更改为
Route::resource('player', 'SoccerPlayerController');