06 - Модули и плагины
Файлы поставщика услуг для модулей и плагинов значительно проще, чем файлы для компонентов. Если вы просмотрите свои папки модулей и плагинов экземпляра 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 зависимости:
- Он использует класс ModuleDispatcherFactory для создания своего собственного экземпляра Dispatcher.php в src/Dispatcher/Dispatcher.php
- Он использует 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, либо в вашем стандартном коде плагина.