Префикс всех маршрутов в Люмен

Есть ли способ в 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-> с префиксом маршрута вашего приложения.

Другие вопросы по тегам