Неисправимая ошибка автозагрузчика PSR-4: класс не найден
У меня есть структура моего проекта так:
src/
├─ Model/
└─ User.php
Мой файл User.php выглядит так:
<?php
namespace Bix\Model;
class User {
И мой автозагрузчик composer.json таков:
"autoload": {
"psr-4": {
"Bix\\": "src/"
}
}
Наконец-то мой bootstrap.php такой:
use Bix\Model\User;
// PSR-4 Autoloader.
require_once "vendor/autoload.php";
Однако, если я попытаюсь создать new User()
Я получаю ошибку Fatal error: Class 'User' not found in /var/www/public/api/v1/index.php on line 8
Глядя на файл autoload_psr4.php, он выглядит нормально:
// autoload_psr4.php @ создается Composer
$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'),
);
Кто-нибудь может указать, где я иду не так с вышесказанным?
1 ответ
Прежде всего, Linux (я не уверен, какой компьютер вы используете) чувствителен к регистру. В своей автозагрузке вы определили src/bix
в то время как это src/Bix
,
Но что более важно, в PSR-4 указанный префикс пространства имен не включается в структуру каталогов (чтобы избежать каталогов, содержащих только один каталог). В вашем случае, если вы настраиваете "Bix\\": "src/"
, класс Bix\Model\User
должен быть расположен в src/Model/User.php
,
РЕДАКТИРОВАТЬ: вы неправильно понимаете пространства имен PHP. В PHP вы не говорите "импортировать все из Bix\Model
в глобальное пространство имен для этого файла "с use Bix\Model;
, Вместо этого это означает: "Псевдоним Model
в этом файле Bix\Model
".
Так что вы должны сделать:
require_once "vendor/autoload.php";
use Bix\Model;
$user = new Model\User();
или же:
require_once "vendor/autoload.php";
use Bix\Model\User;
$user = new User();