Главная PHP Автозагрузка классов с помощью Composer.

PHP


Автозагрузка классов с помощью Composer.

В одной из своих статей я писал о том, как создать свой автозагрузчик классов на php. Но автозагрузку классов для своего проекта можно сделать и с помощью менеджера зависимостей для PHP - Composer. Это особенно актуально, если проект достаточно большой и планируется использование Composer в качестве установки сторонних библиотек (зависимостей).

Для внесения своих данных в файлы автозагрузчика Composer, нужно внести изменения в файл composer.json, а если его еще нет в корне приложения – создать.
Создание осуществляется с помощью выполнения в командной строке, например в консоли OpenServer:

composer init

Перед этим нужно перейти в корневой каталог приложения.
Если Composer установлен не глобально, то вместо composer нужно писать php composer.phar.

При этом будет предложено ввести данные по названию проекта, автору, предложено сразу вписать нужные зависимости. Эти данные не имеют отношения к автозагрузке классов. В принципе, можно вообще создать самому файл composer.json и разместить там в фигурных скобках только объект autoload:

{
    "autoload": {
        "psr-4": {
            "Services\\": "services",
            "App\\": "app"
        }
    }
}

Если же создавать данный файл с помощью команды composer init или использовать файл который уже имеется (если объект autoload отсутствует), то нужно поставить запятую после последнего элемента (но до последней фигурной скобки) и вписать блок autoload.

В данном примере указано, что для автозагрузчика будет использоваться стандарт кодирования PSR-4, согласно которому используется пространство имен классов, файлы классов имеют названия соответствующие названиям находящихся в них классов и тд. подробнее https://zenwalker.me/blog/php-psr-0-vs-psr-4

Согласно примера, для пространства имен начинающегося с Services должна подключаться папка с названием services, находящаяся в корне приложения. С App аналогично.
То есть, например, класс Services\Application должен находиться в папке services/Application.php, тогда Composer автоматически подключит его.

Раздел autoload может включать и другие подразделы: classmap, files.

Подраздел classmap отвечает за описание классов, именование которых не соответствует стандарту PSR-4. То есть, в карте классов мы просто указываем где искать определенные классы. Например:

"classmap": [
    "services/myserv/",
    "services/myserv/Ksl.php"
]

Тут первым элементом массива classmap указываем каталог в котором нужно искать требуемые файлы классов. При этом не уточняем название класса.
Вторым элементом показан пример указания конкретного файла класса, чтобы Composer не приходилось искать в папке services/myserv что-то еще. Конечно стоит прописывать или первый или второй вариант.

Подраздел files отвечает за описание файлов, которые нам необходимо подключать в самом начале исполнения приложения. Например это настройки приложения - config.php. Вместо того, чтобы подключать его в index.php:

require_once '../config.php';

можно указать, чтобы его подключил Composer:

"files": [
    "config.php"
]

в данном случае подключится файл config.php находящийся в корне приложения (там же где и файл composer.json куда это прописываем). Можно подключить любой файл указав путь к нему.

То есть структура блока autoload может включать разные компоненты:

"autoload": {
    "classmap": [
        "services/myserv/Ksl.php"
    ],
    "psr-4": {
        "Services\\": "services",
        "liw\\": ""
    },
    "files": [
        "config.php"
    ]
}

После вписывания нужного кода в объект autoload, сохраняем изменения и далее нужно выполнить обновление файлов автозагрузчика Composer. Если файл composer.json вы сами перед этим создавали, то файлов автозагрузчика еще и вовсе нет. Для того, чтобы они появились, выполните:

composer install

создастся папка vendor, а в ней папка composer с файлами автозагрузки. Там же будет файл autoload_psr4.php в котором перезаписаны наши правила поиска классов согласно стандарта psr-4 и аналогичные файлы для карты классов и файлов. 

Если папка vendor с данными файлами уже была, а вам нужно изменить данные для подключения своих классов, то нужно выполнить команду:

composer dump-autoload -o

которая обновит файлы автозагрузчика Composer и при этом не будут устанавливаться и обновляться зависимости (библиотеки прописанные в блоке require).
Используя после команды ключ «-o», что значит «optimize», классы соответствующие стандарту psr-4 и прописанные для данного объекта будут прописаны в карте классов, что ускорит их загрузку в дальнейшем. 

Так же в папке vendor находится файл autoload.php, который нужно подключить для того, чтобы заработала автозагрузка. Обычно его подключают в «точке входа» файле index.php:

require_once '../vendor/autoload.php';

используя «../» сначала поднимаемся на один уровень выше (у меня index.php находится в каталоге public). Если у вас другая структура, например индексный файл находится в корне приложения, то нужно прописать соответствующий путь к данному файлу.


Вы можете помочь развитию сайта отправив любую сумму

Комментарии

  1. Чувак
    15.08.2018 в 06:05

    Доходчиво спасибо.

Написать комментарий