Как работает автозагрузка PSR-4 в composer для пользовательских библиотек?

Я использую следующую структуру каталогов, основанную на моем понимании того, как работают пространства имен в PHP:

project_root
app/
|    lib/
|    |    MyCompany/
|    |    |    Utility/
|    |    |    |    Logger.php
|    |    |    Core/
|    |    |    |    User.php
vendor/
composer/
symfony/
guzzle/
bootstrap.php
composer.json

Согласно спецификации PSR-4, полное имя класса имеет следующую форму:

\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

Вопрос 1:

Из моей структуры каталогов выше, верно ли предположение ниже?

  • NamespaceName = MyCompany
  • SubNamespaceNames = Utility | ядро
  • ClassName = Logger | пользователь

Вопрос 2:

Если мой файл bootstrap.php содержит следующее:

<?php
require 'vendor/autoload.php';

Как бы я настроить автозагрузку раздел composer.json для автозагрузки классов в каталоге MyCompany? Так что я смогу создать экземпляр Logger в bootstrap.php

7

Решение

Взято из документации, которую вы связали:

{
"autoload": {
"psr-4": {
"MyCompany\\": "app/lib/MyCompany/",
}
}
}

Это говорит само за себя, оно просто говорит автозагрузчику, что app/lib/MyCompany является корнем для MyCompany\ Пространство имен.

Тогда вы сможете использовать класс как \MyCompany\Utility\Logger,

Обратите внимание, что в PSR-4, в отличие от PSR-0, вы обычно опускаете MyCompany из структуры каталогов, и просто используйте app/lib/,

6

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

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

По вопросам рекламы [email protected]