2015-04-17 8 views
12

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

Das ist mein route.php:

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

Aber ich erhalte 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} 

Das ist mein HomeController.php in/app/Http/Controller/

<?php namespace App\Http\Controllers; 

class HomeController extends Controller { 

public function index() 
{ 
    echo 123; 
} 

} 

Was könnte das Problem sein?

+0

Haben Sie 'Namespace App \ Http \ Controller;' in dieser Controller-Datei? – lukasgeiter

+0

@lukasgeiter ja, Namespace App \ Http \ Controller; in der HomeController.php – refear99

+0

Zu Ihrer Information, Dieser Link hat ein gutes Tutorial über Lumen-Installation und erstellen Sie neue REST api http://wsnippets.com/create-rest-api-using-lumen-micro-framework-by-laravel/ – user2943773

Antwort

44

Sie haben die vollständig qualifizierten Klassennamen zu verwenden:

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

OR wickelt alle Routen in einer Gruppe (die eigentlich ist, wie es unter der Haube in Laravel 5 fertig ist)

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

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

}); 
+0

vielen dank !!!! – refear99

+3

Es wäre großartig, wenn Lumen dies in ihren offiziellen Dokumenten irgendwo angegeben hätte. – skcin7

+0

Das ist seltsam, denn wenn Sie in https://github.com/laravel/lumen/blob/master/bootstrap/app schauen.php # L97 gibt es bereits Namespace-Option, aber es funktioniert nicht - hey, es funktioniert, aber nicht in verschachtelten Gruppen :( –

2

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

So würde Ihre Route wie folgt aussehen:

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

Der Unterschied liegt in der RouteServiceProvider, dass Schiffe mit Laravel, die in app/Anbieter/RouteServiceProvider.php gefunden werden kann, die Karte Methode überprüfen, es sieht aus, als

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

so alle Anwendungs ​​Routen folgt tatsächlich unter einem Standard-Namespace gruppiert, die in der Regel App \ Http \ Controllers ist.

Hoffe, dass hilft!

+0

Danke vielmals!!! – refear99

0

Schauen Sie sich die Datei an /bootstrap/app.php Dort können Sie einige Einstellungen vornehmen. Dort unten finden Sie auch die folgenden Zeilen.

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

return $app; 

Welche sollten Ihre Anrufe mit dem richtigen Namespace dienen.

Auch können Sie die .env Einstellungen genau dort aktivieren :)

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

hoffe, das hilft jemand! :)