From dfcd18b9ce6ad9ec9b04f509457ad729a0db7cfa Mon Sep 17 00:00:00 2001 From: rxu Date: Sat, 15 Sep 2018 23:13:18 +0700 Subject: [PATCH 1/2] [ticket/15790] Allow dynamic loading services files for extensions PHPBB3-15790 --- phpBB/phpbb/extension/di/extension_base.php | 42 +++++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/phpBB/phpbb/extension/di/extension_base.php b/phpBB/phpbb/extension/di/extension_base.php index 45ed5c4c19..1fcb3d5d54 100644 --- a/phpBB/phpbb/extension/di/extension_base.php +++ b/phpBB/phpbb/extension/di/extension_base.php @@ -73,30 +73,38 @@ class extension_base extends Extension { $services_directory = false; $services_file = false; + $additional_services_files = array(); if (file_exists($this->ext_path . 'config/' . $container->getParameter('core.environment') . '/container/environment.yml')) { - $services_directory = $this->ext_path . 'config/' . $container->getParameter('core.environment') . '/container/'; + $services_directory = 'config/' . $container->getParameter('core.environment') . '/container'; $services_file = 'environment.yml'; } else if (!is_dir($this->ext_path . 'config/' . $container->getParameter('core.environment'))) { if (file_exists($this->ext_path . 'config/default/container/environment.yml')) { - $services_directory = $this->ext_path . 'config/default/container/'; + $services_directory = 'config/default/container'; $services_file = 'environment.yml'; } else if (!is_dir($this->ext_path . 'config/default') && file_exists($this->ext_path . '/config/services.yml')) { - $services_directory = $this->ext_path . 'config'; + $services_directory = 'config'; $services_file = 'services.yml'; } } if ($services_directory && $services_file) { - $loader = new YamlFileLoader($container, new FileLocator(filesystem_helper::realpath($services_directory))); + $loader = new YamlFileLoader($container, new FileLocator(filesystem_helper::realpath($this->ext_path . $services_directory))); $loader->load($services_file); + + // Load additional services located in service_ prefixed Yaml files if any + $additional_services_files = $this->getServicesFilenames($services_directory, 'services_'); + foreach ($additional_services_files as $file) + { + $loader->load($file); + } } } @@ -136,4 +144,30 @@ class extension_base extends Extension { return str_replace('/', '_', $this->extension_name); } + + /** + * Gets the array of the Yaml filenames. + * + * @param string $services_directory Directory in the extension folder containing services files + * @param string $services_file_prefix Services files prefix to look for + * + * @return array The services filenames array + */ + public function getServicesFilenames($services_directory, $services_file_prefix = '') + { + $servises_files = array(); + $finder = new \Symfony\Component\Finder\Finder(); + $finder + ->name("{$services_file_prefix}*.yml") + ->path($services_directory) + ->files() + ->in($this->ext_path); + + foreach ($finder as $file) + { + $servises_files[] = $file->getBasename(); + } + + return $servises_files; + } } From bbfd0385b07c689f371bb4fe37680a25b2a6e668 Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 22 Sep 2019 17:02:14 +0700 Subject: [PATCH 2/2] [ticket/15790] Fix typo in var name. PHPBB3-15790 --- phpBB/phpbb/extension/di/extension_base.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/phpBB/phpbb/extension/di/extension_base.php b/phpBB/phpbb/extension/di/extension_base.php index 1fcb3d5d54..c8c55e347a 100644 --- a/phpBB/phpbb/extension/di/extension_base.php +++ b/phpBB/phpbb/extension/di/extension_base.php @@ -155,7 +155,7 @@ class extension_base extends Extension */ public function getServicesFilenames($services_directory, $services_file_prefix = '') { - $servises_files = array(); + $services_files = array(); $finder = new \Symfony\Component\Finder\Finder(); $finder ->name("{$services_file_prefix}*.yml") @@ -165,9 +165,9 @@ class extension_base extends Extension foreach ($finder as $file) { - $servises_files[] = $file->getBasename(); + $services_files[] = $file->getBasename(); } - return $servises_files; + return $services_files; } }