автоматическая загрузка psr-0 с композитором не работает, но она отлично работает с автоматической загрузкой psr-4
Я попытался автоматически загрузить файл с помощью PSR-0, но это не автоматическая загрузка этого файла. Я попробовал тот же файл с автоматической загрузкой PSR-4. С PSR-4 это работало отлично. Есть ли какая-либо разница в структуре папок, необходимой для PSR-0?
Я не смог заставить PSR-0 работать, даже если сохранить структуру папок, упомянутую в В чем разница между PSR-0 и PSR-4?
Вот моя структура папок.
Test
--Package
--Test.php
У меня есть в Test.php
:
<?php
namespace Test\Package;
class Test
{
public function __construct()
{
echo "In Test class";
}
}
И composer.json
выглядит как
{
"autoload": {
"psr-0": {
"Test\\Package\\": "Test/Package/"
}
}
}
1 answers
Вопреки интуиции, документация композитора по PSR-0 включает частичный путь, из-за которого кажется, что PSR-0 требует путь к пакету для загрузки классов. На самом деле PSR-0 создает путь на основе пакета, поэтому ему нужен только путь, указанный, если код находится внутри папки, такой как src/
или lib/
, которая не часть пути пространства имен. Если структура каталогов на основе пространства имен начинается в том же каталоге, что и composer.json
, то путь не указан требуется.
Предполагая структуру каталогов, указанную в вопросе, существует несколько способов загрузки этого класса с помощью composer.
PSR-0
{
"autoload": {
"psr-0": { "Test\\Package\\": "" }
}
}
Обратите внимание, что, хотя код находится в Test/Package/
, эта папка не указана в PSR-0.
PSR-4
Для автоматической загрузки PSR-4 путь к источнику пакета должен отображаться в файле composer.json
.
{
"autoload": {
"psr-4": { "Test\\Package\\": "Test/Package/" }
}
}
Карта классов
Когда существует требование загружать классы, которые не являются организованный в типичное дерево папок пространства имен, также можно просто указать список папок, в которых следует искать классы, используя массив classmap
.
{
"autoload": {
"classmap": [ "Test/Package/" ]
}
}
В целом, однако, использование PSR-0 или PSR-4 облегчит работу, поскольку подход classmap
требует, чтобы каждая папка была указана отдельно.