2015-04-29 14 views
5

Wenn auf dem Laravel docs den Beispielcode ausgeführt php artisan make:request StoreBlogPostRequest einen neuen Validierungs-Controller zu erstellen, erhalte ich die folgenden FehlerFehler Lauf macht: Anfrage auf Laravel 5

[RuntimeException]      
Unable to detect application namespace. 

Ich bin nicht sicher, was falsch ist, ich Ich habe ein wenig gesucht, aber nichts erklärt diesen Fehler. Irgendwelche Ideen?

Antwort

9

In Laravel 5, eine „Anwendung“ ist eine Sammlung von PHP-Dateien in einem einzigen Namensraum, in den app/

von Standardordnern gespeichert, und die meisten des Code Laravel 5 in der Probe aus der Dokumentation, dieser Namensraum ist App\. Zum Beispiel könnte ein Controller in Ihrer Anwendung so aussehen.

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

Wenn Laravel Code erzeugt (das heißt, wenn Sie den make:request Befehl verwenden), muss er wissen, was diese Anwendung Namespace ist (es ist möglich, den Namespace mit dem artisan app:name Befehl zu ändern). Aus irgendeinem Grund kann Laravel 5 in Ihrem System den Namespace nicht erkennen.

Wenn man sich den Abschnitt schauen von Laravel 5 Kern-Code, der den Namespace

#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."); 
} 

Sie werden sehen, dass Laravel erkennt den Namespace, indem Sie auf Ihre composer.json Datei, und auf der Suche Für ihrerstes gültig psr-4 Namespace erkennt.

Meine Vermutung ist, Ihre composer.json Datei den Namespace

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

hinzufügen, die in Rücken, und Sie werden gut gehen fehlt.