Автозагрузчик PSR-4 Фатальная ошибка: класс не найден

У меня есть такая структура проекта:

src/
   ├─ Model/
      └─ User.php

Файл My 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'),
); 

Может ли кто-нибудь указать, где я ошибаюсь в вышеупомянутом?

7
задан JeremyKirkham 09 мая '15 в 9:24
источник поделиться
1 ответ

Прежде всего, Linux (я не уверен, какой компьютер вы используете) чувствителен к регистру. В вашей автозагрузке вы определили src/bix, а это src/bix.

Но что более важно, с PSR-4 указанный префикс пространства имен не включен в структуру каталогов (чтобы избежать каталогов, содержащих только один каталог). В вашем случае, если вы настроите "Bix\\": "src/", класс Bix\Model\User должен быть расположен в src/Model/User.php.


EDIT. Вы недопонимаете пространства имен 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();
14
ответ дан Wouter J 09 мая '15 в 11:43
источник поделиться

Другие вопросы по меткам