Файлы поставщика услуг для модулей и плагинов значительно проще, чем файлы для компонентов. Если вы просмотрите свои папки модулей и плагинов экземпляра Joomla, вы найдете несколько примеров services/provider.php файлов.

Модули

Например, для mod_breadcrumbs в Joomla 5 у нас есть:

use Joomla\CMS\Extension\Service\Provider\Module;

public function register(Container $container): void
{
    $container->registerServiceProvider(new ModuleDispatcherFactory('\\Joomla\\Module\\Breadcrumbs'));
    $container->registerServiceProvider(new HelperFactory('\\Joomla\\Module\\Breadcrumbs\\Site\\Helper'));

    $container->registerServiceProvider(new Module());
}

Этот модуль использует стандартный класс Joomla\CMS\Extension\Service\Provider\Module для создания своего класса расширения \Joomla\CMS\Extension\Module.

Он имеет 2 зависимости:

  1. Он использует класс ModuleDispatcherFactory для создания своего собственного экземпляра Dispatcher.php в src/Dispatcher/Dispatcher.php
  2. Он использует HelperFactory для поиска своего вспомогательного файла в src/Helper/BreadcrumbsHelper.php

Плагины

Например, для плагина custom field color в разделе plugins/fields/color

use Joomla\Plugin\Fields\Color\Extension\Color;

public function register(Container $container)
{
    $container->set(
        PluginInterface::class,
        function (Container $container) {
            $plugin     = new Color(
                $container->get(DispatcherInterface::class),
                (array) PluginHelper::getPlugin('fields', 'color')
            );
            $plugin->setApplication(Factory::getApplication());

            return $plugin;
        }
    );
}

Класс расширения плагина - Color, который создается с двумя параметрами, передаваемыми в его конструктор:

  • класс EventDispatcher – получен из родительского DIC, изначально был введен в него из libraries/src/Service/Provider/Dispatcher.php при инициализации Joomla
  • объект stdClass плагина, который Joomla традиционно использовала для хранения данных плагина (id, name, type и параметров).

Это стандартный шаблон, который вы можете использовать для своих собственных плагинов. Очевидно, что вы можете получить экземпляр приложения, вызвав Factory::getApplication либо в файле services/provider.php, либо в вашем стандартном коде плагина.