用于 API 和非 API 的 Laravel 资源控制器
Posted
技术标签:
【中文标题】用于 API 和非 API 的 Laravel 资源控制器【英文标题】:Laravel resource controllers for both API and non-API use 【发布时间】:2013-07-27 15:48:38 【问题描述】:在为同样对 API 进行 AJAX 调用的网站创建资源控制器 PhotosController
后,资源控制器似乎既可用于普通网站,也可用作 API。
这将为Photo
显示一个 id = 1 的 html 页面
http://domain.com/photos/1
而 javascript 使用以下内容更新 Photo
资源并返回 JSON 响应
PUT http://domain.com/api/v1/photos/1
问题:我们是否有 2 个PhotoControllers
,一个用于处理 API 使用,一个用于非 API?
【问题讨论】:
【参考方案1】:没有。您可以让两个单独的路由指向同一个控制器和操作。
Route::get('/photos/1', 'PhotoController@index');
Route::get('/api/v1/photos/1', 'PhotoController@index');
然后,在您的控制器方法中,您可以测试请求是否来自 Ajax。
if (Request::ajax())
// Do some crazy Ajax thing
【讨论】:
为什么要包含域?对我来说,这是一个 DRY 问题,而且有点不必要...... 你不会想要的。我改变了编辑我的答案。感谢您指出这一点,@Mike Anthony【参考方案2】:我使用带前缀的路由组进行 API 调用:
Route::resource('venue', 'VenueController');
Route::group(array('prefix' => 'api'), function()
Route::resource('venue', 'VenueController', array('only' => array('index', 'show')));
);
然后,在控制器中,我使用这个条件:
if (Route::getCurrentRoute()->getPrefix() == 'api')
return Response::json($venues->toArray());
【讨论】:
以上是关于用于 API 和非 API 的 Laravel 资源控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Laravel 护照用于 Auth 和 Lumen 作为 api
用于非 SPA 的 Laravel Sanctum API 令牌
Laravel 5.6 - Passport JWT httponly cookie SPA 身份验证用于自用 API?