Скажем, вы работаете над проектом для кого-то, и вы его определили, задачи делегированы, у вас есть все библиотеки и инструменты, необходимые для начала работы, и вы определили, что будет темой или презентацией, и какой будет функционал или плагины.
Но вместо того, чтобы иметь несколько отдельных плагинов, что, если бы был пакет небольших функциональных плагинов или микро-плагинов, или как бы вы их ни называли, работающих на пакет?
Кроме того, все они построены на одном и том же фундаменте, но имеют общий код друг с другом, и, чтобы сделать вещи более интересными, вы решили использовать автозагрузчик PSR-4 через Composer, чтобы позаботиться обо всем этом?
PSR-4 Автозагрузка плагинов WordPress
Во-первых, способ думать о том, что я пытаюсь сказать (потому что кто знает, ясно ли я понимаю 🙃), состоит в том, что ваша работа находится в wp-content/pluginsкаталоге. И ваш плагин находится, скажем, acme-pluginsи имеет подкаталоги для ваших микро-плагинов.
Мы не будем усложнять этот пример и скажем, что есть основной плагин и только один микро-плагин. Каталог будет выглядеть примерно так;
Теперь есть файлы, которые вы ожидаете увидеть в плагине:
- ПРОЧТИ МЕНЯ,
- ЛИЦЕНЗИЯ,
- ИЗМЕНЕНИЙ,
- композитор.json
- композитор.lock
- продавец
- загрузочный файл плагина,
- и т.п.
Теперь вот в чем дело: если вы используете PSR-2 и собираетесь использовать автозагрузчик PSR-4, вам нужно знать две вещи:
- Пространства имен должны соответствовать организации каталога. Я немного говорил об этом во время своей презентации WordCamp Atlanta 2017 (в частности, о виртуальной и логической организации).
- Как работать с
composer.jsonопределением ваших автозагрузчиков. Вы можете много прочитать об этом здесь, но я дам основные заметки в оставшейся части этого поста.
Таким образом, проблема в том, что vendorкаталог находится на уровне выше, где существуют некоторые исходные файлы. Таким образом, стандартный способ настройки собственного автозагрузчика в Composer не сработает.
Например, очень характерно видеть это :
{
"name": "pressware/acme-plugins",
"description": "A demo plugin",
"autoload": {
"psr-4": {
"Acme": "src/",
}
},
// ...
}
Но чтобы компенсировать нашу работу, нам нужно сделать это :
{
"name": "pressware/acme-plugins",
"description": "A demo plugin",
"autoload": {
"psr-4": {
"Acme": "",
"AcmeMicroPlugin": "MicroPlugin/src/"
}
},
// ...
}
Это простое изменение, но это же простой пример, верно? Итак, какой вывод из этого?
Обратите внимание, что мы обновили некоторые изменения в расположении автозагрузки. В частности, вот что происходит:
- Первый элемент — это пространство имен верхнего уровня, к которому будут принадлежать все подключаемые модули, которые будут принадлежать подключаемому модулю Acme.
- Вторая запись относится к MicroPlugin, который вы видите в каталоге, показанном выше. Это представляет собой пространство имен для этого конкретного плагина и указывает Composer искать исходные файлы для автоматической загрузки с использованием каталога свойств.
Отсюда вы добавите новую запись для автозагрузчика, соответствующую каждому микро-плагину, который будет принадлежать плагину верхнего уровня.
Организация будущих микроплагинов
Есть несколько способов организации кода, позволяющих использовать автозагрузчик по умолчанию.
Если вы будете следовать модели микро-плагинов (из-за отсутствия лучшего термина), то она не будет работать, поэтому вам придется реорганизовать свои файлы, и со временем это может стать проблемой.
