private \Joomla\CMS\Extension\ComponentInterface|\Joomla\CMS\Extension\ModuleInterface|\Joomla\CMS\Extension\PluginInterface
loadExtension
(mixed $type, mixed $extensionName, mixed $extensionPath)
private function loadExtension($type, $extensionName, $extensionPath)
{
if (!empty(ExtensionHelper::$extensions[$type][$extensionName])) {
return ExtensionHelper::$extensions[$type][$extensionName];
}
$container = $this->getContainer()->createChild();
$container->get(DispatcherInterface::class)->dispatch('onBeforeExtensionBoot', AbstractEvent::create('onBeforeExtensionBoot', ['subject' => $this, 'type' => $type, 'extensionName' => $extensionName, 'container' => $container]));
$path = $extensionPath . '/services/provider.php';
if (is_file($path)) {
$provider = (require_once $path);
if ($provider instanceof ServiceProviderInterface) {
$provider->register($container);
}
}
if (!$container->has($type)) {
switch ($type) {
case ComponentInterface::class:
$container->set($type, new LegacyComponent('com_' . $extensionName));
break;
case ModuleInterface::class:
$container->set($type, new Module(new ModuleDispatcherFactory(''), new HelperFactory('')));
break;
case PluginInterface::class:
list($pluginName, $pluginType) = explode(':', $extensionName);
$container->set($type, $this->loadPluginFromFilesystem($pluginName, $pluginType));
}
}
$container->get(DispatcherInterface::class)->dispatch('onAfterExtensionBoot', AbstractEvent::create('onAfterExtensionBoot', ['subject' => $this, 'type' => $type, 'extensionName' => $extensionName, 'container' => $container]));
$extension = $container->get($type);
if ($extension instanceof BootableExtensionInterface) {
$extension->boot($container);
}
ExtensionHelper::$extensions[$type][$extensionName] = $extension;
return $extension;
}