автоматическая загрузка 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/"
             }
  }
}
Author: Community, 2016-06-29

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 требует, чтобы каждая папка была указана отдельно.

 1
Author: jwriteclub, 2016-11-20 15:06:35