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