Laravel 4 RESTful API - 资源控制器 - 更深层次的请求层次结构

时间:2014-01-12 20:40:08

标签: php rest laravel laravel-4

我正在构建API系统的前端部分。 使用Laravel的默认Resource Controller,您可以实现此类请求:

  

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

哪个会叫: /app/controllers/SoccerController.php @ show($ id)方法

我需要至少一个更深层次的深度,才能做到这一点:

  

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

所以它将解决:

/app/controllers/SoccerController.php @ show()方法同时包含“播放器”和“10”参数。

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

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

我这样做基本上是因为我的1个控制器负责与几个模型交谈,而不仅仅是一个。无论是SoccerPlayer还是SoccerTeam或SoccerSchedule,都应该很好地放下 /v1/<controller>/<type>/<id>

通知书?

谢谢!

2 个答案:

答案 0 :(得分:1)

无论如何,您可以通过在资源路径之前放置自定义路线来充分利用这两个世界:

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

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

public function show($type, $id)
{

}

答案 1 :(得分:0)

您可以使用route prefixing

Route::group(array('prefix' => 'soccer'), function()
{

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

});

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

Route::resource('player', 'Soccer\PlayerController');