Reputation: 63619
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?
Upvotes: 5
Views: 2808
Reputation: 1230
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());
}
Upvotes: 2
Reputation: 3622
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
}
Upvotes: 6