web-dev-qa-db-de.com

lumen-Framework-Routing funktioniert nicht

Ich benutze das Lumen-Framework zum ersten Mal, die Route / zu meinem HomeController funktioniert nicht.

Das ist meine route.php:

$app->get('/', '[email protected]');

Ich erhalte jedoch den folgenden Fehler:

[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}  

Dies ist meine HomeController.php in/app/Http/Controllers /

<?php namespace App\Http\Controllers;

class HomeController extends Controller {

public function index()
{
    echo 123;
}

}

Was könnte das Problem sein?

12
refear99

Sie müssen den vollständig qualifizierten Klassennamen verwenden:

$app->get('/', 'App\Http\Controllers\[email protected]');

ODERalle Routen in einer Gruppe umschließen (so wird es in Laravel 5 unter der Haube)

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

    $group->get('/', '[email protected]');
    $group->get('foo', '[email protected]');

});
44
lukasgeiter

Es scheint momentan undokumentiert zu sein, aber Sie müssen den vollständigen Namespace-Pfad zum Controller verwenden.

Ihre Route würde also so aussehen:

$app->get('/', 'App\Http\Controllers\[email protected]');

Der Unterschied liegt im RouteServiceProvider, der mit Laravel ausgeliefert wird. Sie finden ihn in der Datei app/Providers/RouteServiceProvider.php. Überprüfen Sie die Kartenmethode. Es sieht wie folgt aus

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

Daher sind alle Ihre Anwendungsrouten tatsächlich unter einem Standard-Namespace gruppiert, normalerweise App\Http\Controllers.

Hoffentlich hilft das!

2

Schauen Sie sich die Datei /bootstrap/app.php an. Dort können Sie einige Einstellungen vornehmen. Auch dort, am Ende der Datei, finden Sie die folgenden Zeilen.

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

return $app;

Welcher sollte Ihre Anrufe mit dem richtigen Namensraum bedienen.

Dort können Sie auch die .env-Einstellungen aktivieren :)

Werfen Sie einen Blick auf diesen Beitrag https://mattstauffer.co/blog/introducing-Lumen-from-laravel

Hoffe das hilft jemandem! :)

0