Использование префиксов маршрутов в Lumen

Из документов Lumen 5.2:

Атрибут группы префиксов может использоваться для префикса каждого маршрута в группе с заданным URI. Например, вы можете добавить префикс admin ко всем URI маршрута в группе:

$app->group(['prefix' => 'admin'], function () use ($app) {
    $app->get('users', function ()    {
        // Matches The "/admin/users" URL
    });
});

Мой код:

$app->group(['prefix' => 'v1'], function () use ($app) {
    $app->get('lessons', function ()    {
        ['as' => 'lessons.index', 'uses' => 'LessonsController@index'];
    });
});

Это возвращает 200, но явно не вызывает метод index() для LessonsController.

Я также пробовал это:

$app->group(['prefix' => 'v1'], function () use ($app) {
    $app->get('lessons', ['as' => 'lessons.index', 'uses' => 'LessonsController@index']);
});

Результаты в ReflectionException in Container.php line 738: Class LessonsController does not exist


person Joseph    schedule 25.02.2016    source источник


Ответы (1)


В настоящее время я использую такие префиксы:

$app->group(['namespace' => "App\Http\Controllers", 'prefix' => 'v1'], function($app){
    $app->get('/lessons', 'LessonsController@index');   
});

Что отлично работает в моей версии Lumen. Вы получите доступ к URL-адресу /v1/lessons, и он обрабатывается методом index() внутри LessonsController

Примечание. Похоже, что в документации Lumen не указано, что для этого вам потребуется пара ключ-значение 'namespace' => "App\Http\Controllers", чтобы это работало.

person DavidT    schedule 25.02.2016
comment
Я только что вставил именно то, что вы написали, но все еще получаю сообщение об ошибке ReflectionException in Container.php line 738: Class LessonsController does not exist -- в какой версии Lumen он у вас работает? - person Joseph; 25.02.2016
comment
Если я просто делаю $app->get('/v1/lessons', 'LessonsController@index'); без префикса, то он работает, так что контроллер явно присутствует и верен. - person Joseph; 25.02.2016
comment
Вы можете попробовать запустить composer dump-autoload. Однако я упустил, что мои находятся в другом пространстве имен, поэтому у меня также есть 'namespace' => "App\Http\Controllers\Backend" в моем массиве, возможно, попробуйте App\Http\Controllers, который вам нужен, когда впервые вышел Lumen, но они, как предполагается, исправили эту проблему сейчас. - person DavidT; 25.02.2016
comment
Я только что провел небольшое тестирование, и вы действительно правы. Документация кажется неверной, и вам требуется namespace в массиве. Я обновил свой ответ, чтобы включить его - person DavidT; 25.02.2016
comment
Спасибо, это действительно здорово! - person Joseph; 25.02.2016