为也对API进行AJAX调用的网站创建资源控制器PhotosController
后,资源控制器似乎可以在普通网站和API上使用。
这会显示Photo
的ID为1 =
http://domain.com/photos/1
和Javascript使用以下内容更新Photo
资源并返回JSON响应
PUT http://domain.com/api/v1/photos/1
问题:我们是否会有2个PhotoControllers
,一个用于处理API使用,一个用于非API?
答案 0 :(得分:5)
没有。您可以将两个单独的路由指向同一个控制器和操作。
Route::get('/photos/1', 'PhotoController@index');
Route::get('/api/v1/photos/1', 'PhotoController@index');
然后,在您的控制器方法中,您可以测试请求是否来自Ajax。
if (Request::ajax()) {
// Do some crazy Ajax thing
}
答案 1 :(得分: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());
}