0

我正在使用 laravel 的 RESTFul API,我想在我的项目中使用内容协商,但我不知道如何实现。我的控制器按 api 版本分隔,我想区分 api 版本并根据版本使用正确的控制器。

我的 API 路由器是:

Route::group(array('prefix' => 'api'), function() {
    Route::resource('users', 'API\V1\UsersController');
});

我应该创建一个 api.type 过滤器以在我的路由组中使用,还是应该在路由组 clousure 或每个控制器中执行此操作?

4

1 回答 1

3

不要害怕将您的应用程序逻辑分支到库类中。您不必将所有内容都放入 Laravel 给定的文件夹结构中。

事实上,添加您自己的命名空间类组可以带来很大的好处。您可以在此处查看有关创建您自己的应用程序库的一些设置。

完成设置后,您可以创建一个类,其职责是决定要返回的内容类型。这可能基于Accept标头、URL 参数或您定义的任何内容(这取决于您,API 创建者)。

也许这个类将获取Accept标题并将其规范化为“json”、“xml”和“html”之类的东西。

如果您通过标头执行此操作,Request 类有一些 方法Accept可以帮助您。

因此,在伪代码中(要遵循语法错误!),您的控制器可能会执行以下操作:

/* GET /api/users */
public function index()
{
    // Might return "json" or "xml" or "html"
    $contentType = \My\ContentType\Class->getContentType();

    $users = User::all();

    // Not shown here is logic to set `content-type` header in the returned response (json vs xml vs html)
    // Perhaps a method to go into your implementation of \My\ContentType\Class
    return View::make('users.'.$contentType)->with(array( 'users' => $users ));


}

这只是你可能会做什么的一个想法。关键是让自己在一个库中工作,您可以将业务逻辑放入其中,让您开始了解如何为您的应用程序添加业务逻辑。

希望有帮助。

于 2013-08-13T14:12:48.060 回答