Как работает автоматическая загрузка 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 = Утилита | Ядро
  • ClassName = Регистратор / Пользователь

Вопрос 2:

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

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

как я настройка 'autoload' композитора.json для автоматической загрузки классов в каталоге MyCompany? Таким образом, я мог бы создать экземпляр Logger в bootstrap.в PHP

1 ответов


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

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

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

затем вы сможете использовать класс как \MyCompany\Utility\Logger.

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