Ошибка автозапуска PSR-4: класс не найден

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

src/
   ├─ Model/
      └─ User.php

Мой Пользователь.php-файл выглядит так:

<?php
namespace BixModel;

class User {

и мой композитор.автоматический загрузчик json:

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

наконец мое ушко.php это:

use BixModelUser;

// 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 @порожденных Композитор!--8-->

$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;. Вместо этого это означает: "Alias 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();