Nyxynyx
Nyxynyx

Reputation: 63619

Laravel resource controllers for both API and non-API use

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

Answers (2)

Shane
Shane

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

searsaw
searsaw

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

Related Questions