【问题标题】:Laravel 4 RESTful API - resource controller - deeper request hierarchyLaravel 4 RESTful API - 资源控制器 - 更深层次的请求层次结构
【发布时间】:2014-01-27 15:11:30
【问题描述】:

我正在构建 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() 方法同时具有“player”和“10”参数。

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

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

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

建议?

谢谢!

【问题讨论】:

  • 如果您想更好地控制您的路线,我建议您明确定义路线,而不是使用resource controller

标签: php rest laravel laravel-4


【解决方案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)
{

}

【讨论】:

    【解决方案2】:

    你可以使用route prefixing

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      相关资源
      最近更新 更多