Префикс всех маршрутов в Люмен
Есть ли способ в Lumen, чтобы префикс всех моих маршрутов?
Дело в том, что я версионирую свой API через URI, и для каждой создаваемой группы я должен установить префикс 'v1/*', например:
$app->group(['prefix' => 'v1/students/', 'namespace' => 'App\Http\Controllers\Students\Data'], function () use ($app) {
$app->get('/', 'StudentController@get');
$app->get('/{id}', 'StudentController@getByID');
});
2 ответа
Очевидно, группы маршрутов в Lumen не наследуют никаких настроек, что было сделано намеренно, чтобы сделать маршрутизатор проще и быстрее ( см. Комментарий здесь).
Лучше всего будет создать группу маршрутов для каждой версии, чтобы определить базовый префикс и пространство имен контроллера для этой версии. Но ваши индивидуальные маршруты внутри этих групп маршрутов должны быть немного более многословными. Пример показан ниже:
// creates v1/students, v1/students/{id}
$app->group(['prefix' => 'v1', 'namespace' => 'App\Http\Controllers'], function () use ($app) {
$app->get('students', 'Students\Data\StudentController@get');
$app->get('students/{id}', 'StudentController@getByID');
});
// creates v2/students, v2/students/{id}, v2/teachers, v2/teachers/{id}
$app->group(['prefix' => 'v2', 'namespace' => 'App\Http\Controllers'], function () use ($app) {
$app->get('students', 'Students\Data\StudentController@get');
$app->get('students/{id}', 'Students\Data\StudentController@getByID');
$app->get('teachers', 'Teachers\Data\TeacherController@get');
$app->get('teachers/{id}', 'Teachers\Data\TeacherController@getByID');
});
Вы можете префикс всех маршрутов в вашем /bootstrap/app.php. В настоящее время должно быть что-то вроде
# may be slighlty different, since I typed this from memory
$app->router->group([
'namespace' => 'App\Http\Controllers',
], function ($router) {
require __DIR__ . '/../routes/web.php';
});
Как видите, это загружает файл web.php и делает доступной переменную $ router. Вы можете переписать это, чтобы загрузить любой файл php в каталог маршрутов и префикс всех этих маршрутов через
$app->router->group([
'namespace' => 'App\Http\Controllers',
], function ($router) {
// load all files in routes directory, prefix all of them
$globalPrefix = "/v1";
$router->group(["prefix" => $globalPrefix], function($router) {
$routes = glob(__DIR__ . '/../routes/*.php');
foreach ($routes as $route) require $route;
});
});
Как видите, все необходимые маршруты заключены в группу $ router-> с префиксом маршрута вашего приложения.