Композитор PSR-4 Класс автозагрузки не найден

Я несколько часов бьюсь головой, пытаясь понять, почему автозагрузка не работает для "Authentication\auth()". Класс "dBase\db()" загружается просто отлично, но я получаю:

Ошибка: класс 'Authentication\auth' не найден в /var/htdocs/dev/test.php в строке 8

при вызове test.php.

file_structure

Root composer.json -

  "require": {
    "geeshoe/dbClass": "dev-develop",
    "geeshoe/authClass": "dev-master"
  },
  "autoload": {
    "psr-4": {
      "dBase\\": "vendor/geeshoe/dbclass/",
      "Authentication\\": "vendor/geeshoe/authClass/"
    }
  }

заголовок authClass.php -

<?php
namespace Authentication;

use dBase\db;

class auth extends db
{

test.php -

if (file_exists("vendor/autoload.php")) {
    require "vendor/autoload.php";
} else {
    echo "Dam.. Something went wrong!";
}
$test = new \dBase\db();
$var = new \Authentication\auth();

Если бы кто-то мог указать на очевидное для меня, это было бы здорово. Кстати, автозагрузка не указана в файле authClass->composer.json для тестирования.

1 ответ

Решение

Проблема здесь в том, что на самом деле вы не используете PSR-4. В PSR-4 имя класса должно совпадать с именем файла. За db класс это хорошо, потому что класс БД расположен в db.php файл, но auth класс находится в authClass.php файл и в этом проблема. Вы должны обновить имя файла до auth.php

Вам может понадобиться запустить:

composer dump-autoload

Также имейте в виду, что в реальных пакетах один пакет поставщика имеет одно пространство имен, поэтому вы не создаете несколько пространств имен для одного пакета, а только один

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