Контроллеры ресурсов Laravel для использования API и не-API

После создания контроллера ресурсов PhotosController для веб-сайта, который также вызывает обращения к API AJAX, похоже, что контроллер ресурсов может использоваться как на обычном веб-сайте, так и в качестве API.

Это отображает страницу HTML для Photo с id = 1

 http://domain.com/photos/1 

и Javascript использует следующее, которое обновляет ресурс Photo и возвращает ответ JSON

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

Вопрос: Будет ли у нас 2 PhotoControllers , один для обработки API и один для не-API?

    Нет. Вы можете указать два отдельных маршрута на один и тот же контроллер и действие.

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

    Затем в ваших методах контроллера вы можете проверить, является ли запрос Ajax или нет.

     if (Request::ajax()) { // Do some crazy Ajax thing } 

    Я использую группу маршрутов с префиксом для вызовов 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()); }