Как организовать разные версии контроллеров REST API в Laravel 4?

Я знаю, что есть способ создать версии URL-адресов для REST API с маршрутами, но как лучше организовать контроллеры и файлы контроллеров? Я хочу иметь возможность создавать новые версии API и поддерживать работу старых хотя бы некоторое время.


person Sherzod    schedule 11.05.2013    source источник


Ответы (1)


В итоге я использовал пространства имен и каталоги в приложениях/контроллерах:

/app
  /controllers
    /Api
      /v1
        /UserController.php
      /v2
        /UserController.php

И в файлах UserController.php я соответствующим образом устанавливаю пространство имен:

namespace Api\v1;

or

namespace Api\v2;

Затем в своих маршрутах я сделал что-то вроде этого:

Route::group(['prefix' => 'api/v1'], function () {
  Route::get('user',      'Api\v1\UserController@index');
  Route::get('user/{id}', 'Api\v1\UserController@show');
});

Route::group(['prefix' => 'api/v2'], function () {
  Route::get('user',      'Api\v2\UserController@index');
  Route::get('user/{id}', 'Api\v2\UserController@show');
});

Я не уверен, что это лучшее решение. Однако это позволило управлять версиями контроллеров таким образом, чтобы они не мешали друг другу. Вероятно, вы могли бы сделать что-то подобное с моделями, если это необходимо.

person Travis Miller    schedule 14.05.2013
comment
Когда я использовал этот метод, мне приходилось ссылаться на каждый класс вне пространства имен, используя полный путь (пример: \Input, \App) - person Islam A. Hassan; 05.05.2014
comment
Вы также можете добавить оператор use App;. Так работают пространства имен. - person Dustin Graham; 31.05.2014
comment
@iah.vector - проблема с версией, только контроллер должен перейти к v1 или модели, заданию, запросу и ... также должен перейти в папку версии? - person Morteza Sepehri Niya; 28.09.2015
comment
@TravisMiller, а как определить версию посетителя? - person Jamie; 24.01.2016