web-dev-qa-db-ja.com

ルーメンフレームワークルーティングが機能しない

私は初めてLumenフレームワークを使用します。route/私のHomeControllerが機能していません。

これは私のroute.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): 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}  

これは/ app/Http/Controllers /にある私のHomeController.phpです

<?php namespace App\Http\Controllers;

class HomeController extends Controller {

public function index()
{
    echo 123;
}

}

問題は何でしょうか?

12
refear99

完全修飾クラス名を使用する必要があります。

$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');

});
44
lukasgeiter

現在、文書化されていないようですが、コントローラーへの完全な名前空間パスを使用する必要があります。

したがって、ルートは次のようになります。

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

違いは、App/Providers/RouteServiceProvider.phpにあるLaravelに同梱されているRouteServiceProviderにあります。mapメソッドを確認すると、次のようになります。

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

したがって、すべてのアプリケーションルートは、実際にはデフォルトの名前空間(通常はApp\Http\Controllers)でグループ化されます。

お役に立てば幸いです。

2

ファイルを見てください/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

これが誰かを助けることを願っています! :)

0