Пользовательское пространство имен composer не находит класс

Я пытаюсь использовать свое пользовательское пространство имен для своих личных классов.

структура каталогов (как обычно):

    my_project/
      - src/
         |- myComponent.class.php
         - myWrapper.class.php
      - vendor
         |- OtherLibrary
         - Symfony
      - composer.json
      - index.php

в своем композитор.в JSON Я указываю свое собственное пространство имен с помощью:

"autoload": {
    "psr-0": {
        "my_namespace": "src/"
    }
}`

тогда в моем PHP-коде у меня есть что-то вроде:

компонент MyComponent.класс.в PHP

namespace my_namespace;

class myComponent
{
 .... code
}
.в PHP
namespace my_namespace;

require_once __DIR__.'/vendor/autoload.php';

$component = new myComponent();

запуск этого я получаю:

фатальная ошибка: класс 'my_namespacemyComponent' не найден в /path_to_root/my_project / index.php on line 5

пока...

  • Я бы ожидал компонент MyComponent для поиска в разделе my_project / src/, как указано в композитор.в JSON и как это определено в поставщик/композитор/autoload_namespaces.в PHP ('my_namespace' => array($baseDir . '/src')).

  • Я ожидал бы сразу вызвать мой таможню компонент MyComponent, когда я определяю пространство имен для своего собственного пространства имен. Я ошибаюсь?

что не так в моем коде и моих предположениях? Как это исправить?

1 ответов


вы сами нашли ошибки, но вот быстрый сборник того, что делают полезные директивы автозапуска в Composer:

  1. PSR-0 преобразует имя класса В имя пути (подчеркивания и обратные косые черты из пространств имен преобразуются в разделитель каталогов), добавляет".php " в конце и пытается найти этот файл по пути, который вы указали в . Класс myNamespace\myClass и "psr-0":{"myNamespace\": "src"} попытается загрузить src/myNamespace/myClass.php.
  2. PSR-4 работает только с пространство имен. Он удалил префикс пространства имен, указанный в composer.json из полного имени класса, а остаток преобразуется в путь,".php " добавлен в конце и искал по указанному пути. Класс myNamespace\myClass и "psr-4":{"myNamespace\": "src"} попытается загрузить src/myClass.php.
  3. автоматическая загрузка Classmap будет работать путем сканирования всех файлов для классов, интерфейсов и признаков (все, что может быть загружено автоматически), и компилирует карту массива. Он работает с любой схемой имени файла и любым макетом каталога, но попробуйте избегайте этого, потому что ему потребуется обновление карты каждый раз, когда вы добавляете новый класс. Кроме того, требуется время для сканирования файлов во время установки, и для загрузки и хранения этой карты требуется процессор и память.