J'utilise le framework Lumen pour la première fois, la route /
vers mon HomeController ne fonctionne pas.
C'est mon route.php:
$app->get('/', 'HomeController@index');
Mais j'obtiens l'erreur suivante:
[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}
Ceci est mon HomeController.php dans/app/Http/Contrôleurs /
<?php namespace App\Http\Controllers;
class HomeController extends Controller {
public function index()
{
echo 123;
}
}
Quel pourrait être le problème?
Vous devez utiliser le nom de classe complet:
$app->get('/', 'App\Http\Controllers\HomeController@index');
OUencapsule tous les itinéraires dans un groupe (ce qui est en fait le cas sous le capot de Laravel 5)
$app->group(['namespace' => 'App\Http\Controllers'], function($group){
$group->get('/', 'HomeController@index');
$group->get('foo', 'FooController@index');
});
Il semble ne pas être documenté pour le moment, mais vous devez utiliser le chemin d'accès complet à l'espace de noms du contrôleur.
Donc, votre itinéraire ressemblerait à ceci:
$app->get('/', 'App\Http\Controllers\HomeController@index');
La différence réside dans le RouteServiceProvider fourni avec Laravel, qui peut être trouvé dans app/Providers/RouteServiceProvider.php, consultez la méthode de la carte, il se présente comme suit
$router->group(['namespace' => $this->namespace], function($router)
{
require app_path('Http/routes.php');
});
Tous les itinéraires de votre application sont donc regroupés sous un espace de noms par défaut, généralement App\Http\Controllers.
J'espère que cela pourra aider!
Regardez le fichier /bootstrap/app.php
Là vous pouvez faire quelques réglages. Là aussi, au bas du fichier, vous trouverez les lignes suivantes.
$app->group(['namespace' => 'App\Http\Controllers'], function ($app) {
require __DIR__.'/../app/Http/routes.php';
});
return $app;
Ce qui devrait servir vos appels avec le bon espace de noms.
Aussi, vous pouvez activer les paramètres .env juste là :)
Jetez un oeil à cet article https://mattstauffer.co/blog/introducing-Lumen-from-laravel
J'espère que cela aide quelqu'un! :)