4

在为同样对 API 进行 AJAX 调用的网站创建资源控制器后PhotosController,资源控制器似乎既可以在普通网站上使用,也可以作为 API 使用。

这将显示一个Photoid = 1的 HTML 页面

http://domain.com/photos/1

和 Javascript 使用以下内容更新Photo资源并返回 JSON 响应

PUT http://domain.com/api/v1/photos/1

问题:我们会有 2 个PhotoControllers,一个用于处理 API 使用,一个用于非 API 吗?

4

2 回答 2

5

不可以。你可以让两条单独的路由指向同一个控制器和动作。

Route::get('/photos/1', 'PhotoController@index');
Route::get('/api/v1/photos/1', 'PhotoController@index');

然后,在您的控制器方法中,您可以测试请求是否来自 Ajax。

if (Request::ajax()) {
    // Do some crazy Ajax thing
}
于 2013-07-27T16:00:00.707 回答
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());
}
于 2014-03-13T01:31:41.797 回答