我正在使用laravel在RESTFul API中工作,我想在我的项目中使用内容协商,但我不知道如何实现这一点。 我的控制器是由api版本支持的,我想区分api版本并使用正确的控制器,取决于版本。
我的API路由器是:
Route::group(array('prefix' => 'api'), function() {
Route::resource('users', 'API\V1\UsersController');
});
我应该创建一个api.type过滤器以在我的路由组中使用,还是应该在路由组clousure中执行,或者在每个控制器中?
答案 0 :(得分:3)
不要害怕将应用程序逻辑扩展到库类中。您不必将所有内容都放在Laravel给定的文件夹结构中。
事实上,添加自己的命名空间类组可以带来很大的好处。您可以在creating your own application library here上看到一些设置。
完成设置后,您可以创建一个类,其职责是决定要返回的内容类型。这可能基于Accept
标题,网址参数或您定义的任何内容(这取决于您,API创建者)。
也许这个类会使用Accept
标题并将其标准化为“json”,“xml”和“html”。
Request类有some methods,可以通过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 ));
}
这只是对你可能会做什么的一个想法。关键点是让自己在一个可以放置业务逻辑的库中工作,让您开始了解如何为您的应用程序添加业务逻辑。
希望有所帮助。