2015-05-09 30 views
7

ich wie so meine Projektstruktur haben:PSR-4 Autoloader Fatal error: Klasse nicht gefunden

src/ 
    ├─ Model/ 
     └─ User.php 

Meine User.php Datei sieht wie folgt aus:

<?php 
namespace Bix\Model; 

class User { 

Und mein composer.json Autoloader das ist:

"autoload": { 
    "psr-4": { 
     "Bix\\": "src/" 
    } 
    } 

Schließlich mein bootstrap.php ist dies:

use Bix\Model\User; 

// PSR-4 Autoloader. 
require_once "vendor/autoload.php"; 

Allerdings, wenn ich versuche, und erstellen Sie eine new User(), erhalte ich die Fehler Fatal error: Class 'User' not found in /var/www/public/api/v1/index.php on line 8

an den Komponisten autoload_psr4.php Suche Datei sieht es ok:

// autoload_psr4.php nach Komponist

@generated
$vendorDir = dirname(dirname(__FILE__)); 
$baseDir = dirname(dirname($vendorDir)); 

return array(
    'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'), 
    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), 
    'KeenIO\\' => array($vendorDir . '/keen-io/keen-io/src'), 
    'Bix\\' => array($baseDir . '/src'), 
); 

Kann jemand darauf hinweisen, wo ich mit dem oben genannten falsch liege?

Antwort

14

Erstens, Linux (ich bin mir nicht sicher, welchen PC Sie verwenden) Groß-und Kleinschreibung. In Ihrem Autoloading haben Sie src/bix definiert, während es src/Bix ist.

Aber noch wichtiger, mit PSR-4 ist das angegebene Namespacepräfix nicht in der Verzeichnisstruktur enthalten (um Verzeichnisse mit nur einem Verzeichnis zu vermeiden). Wenn Sie in Ihrem Fall "Bix\\": "src/" konfigurieren, sollte sich eine Klasse Bix\Model\User in src/Model/User.php befinden.


EDIT: Sie PHP Namespaces Missverständnis. In PHP sagen Sie nicht "Importieren Sie alles von Bix\Model in den globalen Namespace für diese Datei" mit use Bix\Model;. Stattdessen bedeutet es: "Alias ​​Model in dieser Datei zu Bix\Model".

So sollten Sie entweder tun:

require_once "vendor/autoload.php"; 

use Bix\Model; 

$user = new Model\User(); 

oder:

require_once "vendor/autoload.php"; 

use Bix\Model\User; 

$user = new User(); 
+0

ich die composer.json zu dieser Aktualisierung: "Bix \\": "src /" und die Ordnerstruktur dieses : src/Model/User.php aber dort bekomme ich immer noch den Fehler 'class User nicht gefunden' – JeremyKirkham

+1

@JeremyKirkham Nachdem Sie die Autoload-Konfiguration aktualisiert haben, müssen Sie 'composer dump-autoload' ausführen, um den Autoloader zu aktualisieren –

+0

Ich habe das schon gemacht . Ich habe meine Frage mit dem neuen Ordner/Struktur-Autoloader aktualisiert. – JeremyKirkham