PSR-4 autochargeur Fatal error: Class not found
J'ai mon projet de structure comme suit:
src/
├─ Model/
└─ User.php
Mon User.php fichier ressemble à ceci:
<?php
namespace Bix\Model;
class User {
Et mon compositeur.json autochargeur est-ce:
"autoload": {
"psr-4": {
"Bix\\": "src/"
}
}
Enfin mon bootstrap.php est-ce:
use Bix\Model\User;
//PSR-4 Autoloader.
require_once "vendor/autoload.php";
Cependant si j'ai essayer de créer un new User()
, j'obtiens l'erreur Fatal error: Class 'User' not found in /var/www/public/api/v1/index.php on line 8
En regardant le compositeur autoload_psr4.php fichier il semble ok:
//autoload_psr4.php @générée par le Compositeur
$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'),
);
Quelqu'un peut-il point où je vais mal avec ce qui précède?
OriginalL'auteur JeremyKirkham | 2015-05-09
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, Linux (je ne suis pas sûr du PC que vous utilisez) est sensible à la casse. Dans votre auto-chargement, vous avez défini
src/bix
, alors qu'il estsrc/Bix
.Mais le plus important, avec le PSR-4, le préfixe d'espace de noms spécifié est pas inclus dans la structure de répertoire (pour éviter les répertoires contenant un seul répertoire). Dans votre cas, si vous configurez
"Bix\\": "src/"
, une classeBix\Model\User
doit être situé danssrc/Model/User.php
.MODIFIER: Vous êtes malentendu PHP espaces de noms. En PHP, vous ne dites pas "importer tout le contenu de
Bix\Model
dans l'espace de noms global pour ce fichier" avecuse Bix\Model;
. Au lieu de cela, il signifie: "AliasModel
dans ce fichier pourBix\Model
".Je vous conseille donc de faire:
ou:
après la mise à jour de configuration de chargement automatique, vous devez exécuter
composer dump-autoload
de mettre à jour l'autochargeurJ'ai déjà fait cela. J'ai mis à jour ma question avec le nouveau dossier/structure de l'autochargeur.
J'ai mis à jour ma réponse 🙂
Merci pour votre réponse, en ajoutant également que si vous êtes à la recherche de chargement automatique du répertoire courant, vous pouvez le faire:
"Foo\\": ""
sans y inclure les barres obliques.OriginalL'auteur Wouter J