Laravel resource controllers for both API and non-

2019-04-10 02:45发布

After creating a resource controller PhotosController for a website that also does AJAX calls to the API, it appears that the resource controller can be used on both the normal website and as the API.

This displays a HTML page for Photo with id = 1

http://domain.com/photos/1

and Javascript uses the following which updates the Photo resource and returns a JSON response

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

Question: Will we have 2 PhotoControllers, one to handle API usage and one for non-API?

2条回答
干净又极端
2楼-- · 2019-04-10 03:20

No. You can have two separate routes point to the same controller and action.

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

Then, in your controller methods, you can test whether the request is from Ajax or not.

if (Request::ajax()) {
    // Do some crazy Ajax thing
}
查看更多
We Are One
3楼-- · 2019-04-10 03:20

I use a route group with prefix for API calls:

Route::resource('venue', 'VenueController');

Route::group(array('prefix' => 'api'), function(){
    Route::resource('venue', 'VenueController', array('only' => array('index', 'show')));
});

Then, in the controller, I use this condition:

if (Route::getCurrentRoute()->getPrefix() == 'api') {
    return Response::json($venues->toArray());
}
查看更多
登录 后发表回答