用于API和非API使用的Laravel资源控制器

时间:2013-07-27 15:48:38

标签: php laravel laravel-4 restful-url

为也对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?

2 个答案:

答案 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());
}