Я пытаюсь собрать все грани, которые я нашел об автозагрузке класса в композиторе, но я не могу заставить его работать. В каждом примере, который я вижу, отсутствует какая-то часть. В основном это сводится к двум файлам с 4 строками:
index.php
$loader = require 'vendor/autoload.php'; $loader->add('Vendor\\', __DIR__.'/../app/'); new Vendor_Package_Obj();
Приложение / Vendor / Упаковка / Obj.php
class Obj {}
Я также пробовал psr-4 и все мыслимые комбинации папок и имен для пакета Vendor Package Obj? но не повезло найти рабочее решение.
Как я могу автозагрузить файл с композитором с использованием любого из этих стандартов?
Согласно PSR-4 , полное имя класса ДОЛЖНО иметь имя пространства имен верхнего уровня, также известное как «пространство имен поставщиков», а подчеркивания не имеют особого значения ни в одной части полностью квалифицированного имени класса.
Попробуй это:
cd ~ mkdir -p testproj/src/MyApp/Package cd testproj composer init && composer update
Создайте свой index.php с этим контентом:
<?php $loader = require 'vendor/autoload.php'; $loader->add('MyApp\\', __DIR__.'/src/'); $a = new MyApp\Package\Obj(); var_dump($a);
И поместите класс Obj (src / MyApp / Package / Obj.php):
<?php namespace MyApp\Package; class Obj {}
Теперь, когда вы запускаете код:
php index.php
Вы должны получить это как результат:
class MyApp\Package\Obj#2 (0) { }
Также каталоги леса должны выглядеть так:
testproj ├── composer.json ├── index.php ├── src │ └── MyApp │ └── Package │ └── Obj.php └── vendor ├── autoload.php └── composer ├── ClassLoader.php ├── autoload_classmap.php ├── autoload_namespaces.php ├── autoload_psr4.php └── autoload_real.php