✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Использование реестра, подписчиков и сервисов в WordPress

9

TL;DR: я считаю, что использование реестра, подписчиков и сервисов очень полезно при создании ориентированных на серверную часть плагинов и утилит для WordPress. В этом посте рассказывается, как это сделать.


После многих лет работы с шаблонами проектирования, объектно-ориентированным программированием и WordPress неизбежно возникнут общие способы решения проблем.

Так мы получили объектно-ориентированные шаблоны проектирования, так что, возможно, это их вариант, ориентированный на WordPress.

Хотя я писал о таких вещах, как реестры, в предыдущих статьях (и даже не таких уж старых ), никогда не будет лишним вернуться к той же теме, особенно когда есть что добавить к предыдущему варианту.

Реестр, подписчики и службы

Все, что описано ниже, следует понимать в контексте плагина WordPress. То есть это не должно восприниматься как способ работы с любыми другими фреймворками, языками, приложениями или при использовании его с любыми другими шаблонами.

Помните об этом, читая это.


В любом случае, общая идея комбинации этих типов объектов следующая:

  1. Реестр обрабатывает всех подписчиков,
  2. Подписчики прослушивают хуки в WordPress (те, которые существуют, или даже пользовательские хуки),
  3. Службы выполняют фактическую работу всякий раз, когда подписка отправляет их.

Цель состоит в том, чтобы зарегистрировать классы, ответственные за диспетчеризацию работы, в одном месте. Вот и все.

Кроме того, это также упрощает разделение вещей, поэтому, если вы хотите протестировать свои службы изолированно, это намного проще, потому что они не обязательно тесно связаны с WordPress. А если они есть, то можно имитировать данные, которые нужно передать в заданную функцию, а затем оценить результат.

Это не статья о тестировании, так что вернемся к реальным классам.

Реестр

По определению, целью реестра является отслеживание вещей. Когда дело доходит до реализации этого шаблона в WordPress, идея заключается в том, что реестр может отслеживать подписчиков (о чем я расскажу позже в этой статье).

Использование реестра, подписчиков и сервисов в WordPress

Фото Денни Мюллера на Unsplash

Кроме того, идея состоит в том, что когда придет время, которое, скорее всего, будет другим, независимо от структуры вашего плагина, все подписчики будут экземплярами. Однако к этому моменту вы, вероятно, захотите сделать это в начале жизненного цикла WordPress.

Тем не менее, вот пример кода для регистрации подписчиков:

private $subscribers = [ AssetSubscriber::class, // ... DeletedUserSubscriber::class, ];

Далее, вот функция для создания экземпляров подписчиков.

Эти блоки могут быть частью одной и той же функции или могут быть отдельными в зависимости от ваших потребностей.

Подписчики

Как уже упоминалось, подписчики — это способ:

  1. Слушайте определенный хук в WordPress
  2. Отправьте сервис для выполнения любой работы, предназначенной для данного хука.

Итак, предположим на мгновение, что вы хотите что-то делать всякий раз, когда пользователь удаляется. Вы хотите создавать экземпляр службы через подписчика всякий раз, когда происходит этот хук.

Использование реестра, подписчиков и сервисов в WordPress

Фото Ли Кэмпбелл на Unsplash

В качестве примера:

Обратите внимание, что подписчик знает о сервисе (хотя он не поддерживает от него зависимости, поскольку является просто посредником между WordPress и сервисом) и указывает хук на сервисе, который его создает.

Услуги

Наконец, сервисы — это объекты, которые выполняют всю тяжелую работу в плагине. Это означает, что если им нужно прочитать или записать в базу данных, файловую систему, сеть, обработать данные и т. д., все это происходит в их контексте.

Использование реестра, подписчиков и сервисов в WordPress

Фото Эрика Маклина на Unsplash

Они могут знать о других классах, а могут и не знать. Они могут реализовывать интерфейс или абстрактный класс или нет. Это действительно выходит за рамки этого поста. Но дело в том, что на примере хука выше, если вы хотите что-то сделать при удалении пользователя, вы делаете это внутри сервиса.

Например:

class DeletedUserService { public function add(string $hook) { add_action($hook, [$this, 'deletedUser'], 99, 1); } public function deletedUser(int $userId) { $user = get_userdata($userId); if (false === $user) { return; } // Do work with the user that's being deleted. } }

И это конец. После запуска службы управление будет возвращено WordPress, и приложение продолжит работу в обычном режиме.

Все вместе сейчас

Предполагая, что у вас есть загрузочный файл для вашего плагина, что в большинстве случаев так и происходит, поскольку именно здесь определяется требуемый плагин, требуется автозагрузчик и происходит создание экземпляра самого плагина.

Если вам интересно увидеть более полное решение, демонстрирующее, как использовать приведенный выше код на практике, сообщите мне об этом в Твиттере. Таким образом, я буду знать, чтобы продолжить и подготовить еще одну статью. 🙂

Источник записи: tommcfarlin.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее