2015-04-17 12 views
12

Uso la struttura Lumen per la prima volta, il percorso / sul mio HomeController non funziona.lume routing quadro non funzionante

Questo è il mio route.php:

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

ma ottengo il seguente errore:

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

Questo è il mio HomeController.php in/app/HTTP/Controller/

<?php namespace App\Http\Controllers; 

class HomeController extends Controller { 

public function index() 
{ 
    echo 123; 
} 

} 

Quale potrebbe essere il problema?

+0

Avete l'applicazione 'namespace App \ Http \ Controllers 'in quel file controller? – lukasgeiter

+0

@lukasgeiter yes, namespace App \ Http \ Controllers; nell'HomeController.php – refear99

+0

Per il tuo riferimento, questo link contiene un buon tutorial sull'installazione di lumen e crea una nuova API REST http://wsnippets.com/create-rest-api-using-lumen-micro-framework-by-laravel/ – user2943773

risposta

44

è necessario utilizzare il nome di classe pienamente qualificato:

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

O avvolgere tutte le rotte di un gruppo (che in realtà è come è fatto sotto il cofano in laravel 5)

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

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

}); 
+0

grazie mille !!!! – refear99

+3

Sarebbe bello se Lumen avesse specificato questo ovunque nei loro documenti ufficiali. – skcin7

+0

Questo è strano, perché se si guarda in https://github.com/laravel/lumen/blob/master/bootstrap/app.php # L97 c'è già l'opzione namespace, ma non funziona - hey aspetta che funzioni ma non nei gruppi nidificati :( –

2

Al momento sembra non documentato, ma è necessario utilizzare il percorso completo dello spazio dei nomi per il controller.

Quindi il percorso sarà simile a questa:

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

La differenza sta nel RouteServiceProvider fornito con laravel, che si trova in app/fornitori/RouteServiceProvider.php, controlla il metodo di carta, esso sembra come segue

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

Quindi, tutti i percorsi di applicazione in realtà sono raggruppati sotto un namespace di default, che è di solito App \ Http \ Controller.

Spero che questo aiuti!

+0

molte grazie!!! – refear99

0

Dai un'occhiata al file /bootstrap/app.php Qui puoi effettuare alcune impostazioni. Inoltre, nella parte inferiore del file, troverai le seguenti linee.

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

return $app; 

Quale dovrebbe servire le chiamate con il giusto spazio dei nomi.

Inoltre è possibile attivare le impostazioni .env proprio lì :)

Date un'occhiata a questo post https://mattstauffer.co/blog/introducing-lumen-from-laravel

Spero che questo aiuti qualcuno! :)