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

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

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

мой проект/
- срк /
| - myComponent.class.php
\ - myWrapper.class.php
- продавец
| - ДругоеБиблиотека
\ - Symfony
- composer.json
- index.php

в моем composer.json Я определяю свое собственное пространство имен с помощью:

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

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

myComponent.class.php

namespace my_namespace;

class myComponent
{
.... code
}

index.php

namespace my_namespace;

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

$component = new myComponent();

Неустранимая ошибка: класс ‘my_namespace \ myComponent’ не найден в /path_to_root/my_project/index.php в строке 5

  • Я бы ожидал MyComponent искать в my_project / SRC /, как указано в composer.json и как определено в продавец / композитор / autoload_namespaces.php ('my_namespace\\' => array($baseDir . '/src')).

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

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

10

Решение

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

  1. PSR-0 преобразует имя класса в имя пути (подчеркивания и обратные слэши из пространств имен преобразуются в разделитель каталогов), добавляет «.php» в конце и пытается найти этот файл по пути, который вы указали в composer.json файл. Класс 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. Автозагрузка карты классов будет работать путем сканирования всех файлов на наличие классов, интерфейсов и признаков (всего, что может быть автоматически загружено), и будет составлять карту массива. Он работает с любой схемой имени файла и любой схемой каталогов, но старайтесь избегать этого, потому что он будет нуждаться в обновлении карты каждый раз, когда вы добавляете новый класс. Кроме того, требуется время для сканирования файлов во время установки, и требуется некоторое количество ресурсов процессора и памяти для загрузки и хранения этой карты.
29

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector