После создания контроллера ресурсов 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()); }