Я знаю, что есть способ создать версии URL-адресов для REST API с маршрутами, но как лучше организовать контроллеры и файлы контроллеров? Я хочу иметь возможность создавать новые версии API и поддерживать работу старых хотя бы некоторое время.
Как организовать разные версии контроллеров REST API в Laravel 4?
Ответы (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
Когда я использовал этот метод, мне приходилось ссылаться на каждый класс вне пространства имен, используя полный путь (пример: \Input, \App)
- person Islam A. Hassan; 05.05.2014
Вы также можете добавить оператор
use App;
. Так работают пространства имен.
- person Dustin Graham; 31.05.2014
@iah.vector - проблема с версией, только контроллер должен перейти к v1 или модели, заданию, запросу и ... также должен перейти в папку версии?
- person Morteza Sepehri Niya; 28.09.2015
@TravisMiller, а как определить версию посетителя?
- person Jamie; 24.01.2016