Не работает
Я использую структуру Lumen в первый раз, маршрут /
на мой HomeController не работает.
Это мой route.php:
$app->get('/', '[email protected]');
Но я получаю следующую ошибку:
[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): Illuminate\Container\Container->build('HomeController', Array)
#2 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(358): Illuminate\Container\Container->make('HomeController', Array)
#3 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1184): Laravel\Lumen\Application->make('HomeController')
#4 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1157): Laravel\Lumen\Application->callControllerAction(Array)
#5 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1142): Laravel\Lumen\Application->callActionOnArrayBasedRoute(Array)
#6 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1120): Laravel\Lumen\Application->handleArrayBasedFoundRoute(Array)
#7 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1058): Laravel\Lumen\Application->handleFoundRoute(Array)
#8 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1006): Laravel\Lumen\Application->dispatch(NULL)
#9 /Users/refear99/Web/qingsongchou_api/public/index.php(28): Laravel\Lumen\Application->run()
#10 {main}
Это мой HomeController.php in/app/Http/Controllers/
<?php namespace App\Http\Controllers;
class HomeController extends Controller {
public function index()
{
echo 123;
}
}
В чем проблема?
Ответы
Ответ 1
Вы должны использовать полное имя класса:
$app->get('/', 'App\Http\Controllers\[email protected]');
ИЛИ обернуть все маршруты в группе (это на самом деле то, как это делается под капотом в Laravel 5)
$app->group(['namespace' => 'App\Http\Controllers'], function($group){
$group->get('/', '[email protected]');
$group->get('foo', '[email protected]');
});
Ответ 2
Сейчас, похоже, не документировано, но вам нужно использовать полный путь пространства имен к контроллеру.
Таким образом, ваш маршрут будет выглядеть так:
$app->get('/', 'App\Http\Controllers\[email protected]');
Разница заключается в RouteServiceProvider, который поставляется с Laravel, который можно найти в приложении /Providers/RouteServiceProvider.php, проверьте метод карты, он выглядит следующим образом
$router->group(['namespace' => $this->namespace], function($router)
{
require app_path('Http/routes.php');
});
Таким образом, все ваши маршруты приложений фактически сгруппированы в пространство имен по умолчанию, которое обычно является App\Http\Controllers.
Надеюсь, что это поможет!
Ответ 3
Взгляните на файл /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
Надеюсь, это поможет кому-то!:)