2015-04-29 9 views
5

Quando si esegue il codice di esempio sui documenti laravel php artisan make:request StoreBlogPostRequest per creare un nuovo controller di convalida, ottengo il seguente erroreerrore eseguendo make: richiesta su laravel 5

[RuntimeException]      
Unable to detect application namespace. 

Non sono sicuro di ciò che è sbagliato, io' Ho fatto qualche ricerca, ma nulla spiega veramente questo errore. Qualche idea?

risposta

9

In laravel 5, una "applicazione" è una raccolta di file PHP sotto un unico spazio dei nomi, memorizzato nella cartella app/

Per impostazione predefinita, e nella maggior parte del codice di esempio laravel 5 dalla documentazione, questo spazio dei nomi è App\. Ad esempio, un controller nell'applicazione potrebbe apparire come questo.

namespace App\Http\Controller; 
class MyController 
{ 
    //... 
} 

Quando laravel genera codice (vale a dire quando si utilizza il comando make:request), ha bisogno di sapere che cosa questo namespace applicazione è (è possibile cambiare lo spazio dei nomi con il comando artisan app:name). Per qualche ragione, nel tuo sistema, Laravel 5 non può rilevare lo spazio dei nomi.

Se guardate la sezione del laravel 5 codice di base che individua lo spazio dei nomi

#File: vendor/laravel/framework/src/Illuminate/Console/AppNamespaceDetectorTrait.php 
protected function getAppNamespace() 
{ 
    $composer = json_decode(file_get_contents(base_path().'/composer.json'), true); 

    foreach ((array) data_get($composer, 'autoload.psr-4') as $namespace => $path) 
    { 
     foreach ((array) $path as $pathChoice) 
     { 
      if (realpath(app_path()) == realpath(base_path().'/'.$pathChoice)) return $namespace; 
     } 
    } 

    throw new RuntimeException("Unable to detect application namespace."); 
} 

Vedrai che laravel rileva lo spazio dei nomi, cercando in file composer.json, e alla ricerca di thefirst psr-4 spazio dei nomi validi.

La mia ipotesi è il file composer.json manca lo spazio dei nomi

"autoload": { 
    "classmap": [ 
     "database" 
    ], 
    "psr-4": { 
     "App\\": "app/" 
    } 
}, 

aggiungere che indietro, e sarete pronti per partire.