маршрутизация lumen framework не работает

Я использую структуру Люмена в первый раз, маршрут / для моего HomeController не работает.

Это мой маршрут.на PHP:

$app->get('/', 'HomeController@index');

но я получаю следующую ошибку:

[2015-04-17 07:03:41] lumen.ERROR: exception 'ReflectionException' with message 'Class HomeController does not exist' in /Users/refear99/Web/qingsongchou_api/vendor/illuminate/container/Container.php:776

Stack trace:
#0 /Users/refear99/Web/qingsongchou_api/vendor/illuminate/container/Container.php(776): ReflectionClass->__construct('HomeController')
#1 /Users/refear99/Web/qingsongchou_api/vendor/illuminate/container/Container.php(656): IlluminateContainerContainer->build('HomeController', Array)
#2 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(358): IlluminateContainerContainer->make('HomeController', Array)
#3 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1184): LaravelLumenApplication->make('HomeController')
#4 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1157): LaravelLumenApplication->callControllerAction(Array)
#5 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1142): LaravelLumenApplication->callActionOnArrayBasedRoute(Array)
#6 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1120): LaravelLumenApplication->handleArrayBasedFoundRoute(Array)
#7 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1058): LaravelLumenApplication->handleFoundRoute(Array)
#8 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1006): LaravelLumenApplication->dispatch(NULL)
#9 /Users/refear99/Web/qingsongchou_api/public/index.php(28): LaravelLumenApplication->run()
#10 {main}  

Это мой HomeController.php в / app / Http / контроллеры/

<?php namespace AppHttpControllers;

class HomeController extends Controller {

public function index()
{
    echo 123;
}

}

в чем может быть проблема?

3 ответов


вы должны использовать полное имя класса:

$app->get('/', 'App\Http\Controllers\HomeController@index');

или обернуть все маршруты в группу (что на самом деле, как это делается под капотом в Laravel 5)

$app->group(['namespace' => 'App\Http\Controllers'], function($group){

    $group->get('/', 'HomeController@index');
    $group->get('foo', 'FooController@index');

});

Он кажется недокументированным прямо сейчас, но вам нужно использовать полный путь пространства имен к контроллеру.

Итак, ваш маршрут будет выглядеть так:

$app->get('/', 'App\Http\Controllers\HomeController@index');

разница заключается в RouteServiceProvider, который поставляется с Laravel, который можно найти в app/Providers/RouteServiceProvider.php, проверьте метод карты, он выглядит следующим образом

$router->group(['namespace' => $this->namespace], function($router)
{
    require app_path('Http/routes.php');
});

таким образом, все ваши маршруты приложений фактически сгруппированы в пространстве имен по умолчанию, которое обычно App\Http \ контроллеры.

надеюсь, что это поможет!


взгляните на файл /bootstrap/app.php там вы можете изменить некоторые параметры. Там же, в нижней части файла, вы найдете следующие строки.

$app->group(['namespace' => 'App\Http\Controllers'], function ($app) {
    require __DIR__.'/../app/Http/routes.php';
});

return $app;

который должен обслуживать ваши вызовы с правильным пространством имен.

Также вы можете активировать .настройки env прямо там:)

взгляните на этот пост https://mattstauffer.co/blog/introducing-lumen-from-laravel

надеюсь, это поможет кому-то! :)