1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-08-12 11:44:08 +02:00

Merge remote-tracking branch 'upstream/develop' into ticket/11015

* upstream/develop: (31 commits)
  [ticket/11194] Service tag data is stored in an array so access it correctly
  [ticket/11193] Instantiate a single collection_pass for all collections
  [ticket/11152] Basic tests for the container functions
  [ticket/11152] Compile the install container
  [ticket/11152] Throw error if services.yml is missing
  [ticket/11152] Remove old container processor calls
  [ticket/11152] Use realpath in container extensions consistently
  [ticket/11152] Rename collection to collection_pass
  [ticket/11152] Remove @api docblocks
  [ticket/11152] Create separate function for debug-dependent container
  [ticket/11152] Change phpbb_di_pass_cron to generic phpbb_di_pass_collection
  [ticket/11152] Convert cron_task_collection to generic di_service_collection
  [ticket/11152] Use relative root path in container, one dumped container per path
  [ticket/11152] Move container functions to a separate function file
  [feature/compiled-dic] Rename $phpEx to $php_ext in new code
  [feature/compiled-dic] Use an absolute path for core.root_path parameter
  [feature/compiled-dic] Update the composer.lock file
  [feature/compiled-dic] Purge cache to make ext services available right away
  [feature/compiled-dic] Fix root path when container is created after install
  [feature/compiled-dic] Remove old test
  ...
This commit is contained in:
Igor Wiedler
2012-11-12 10:46:21 +01:00
27 changed files with 1463 additions and 442 deletions

View File

@@ -16,40 +16,31 @@ if (!defined('IN_PHPBB'))
}
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\Config\FileLocator;
/**
* Configure the container for phpBB's services though
* user-defined parameters defined in the config.php file.
* Container config extension
*/
class phpbb_di_processor_config implements phpbb_di_processor_interface
class phpbb_di_extension_config extends Extension
{
private $config_file;
private $phpbb_root_path;
private $php_ext;
/**
* Constructor.
*
* @param string $config_file The config file
* @param string $phpbb_root_path The root path
* @param string $php_ext The PHP extension
*/
public function __construct($config_file, $phpbb_root_path, $php_ext)
public function __construct($config_file)
{
$this->config_file = $config_file;
$this->phpbb_root_path = $phpbb_root_path;
$this->php_ext = $php_ext;
}
/**
* @inheritdoc
* Loads a specific configuration.
*
* @param array $config An array of configuration values
* @param ContainerBuilder $container A ContainerBuilder instance
*
* @throws InvalidArgumentException When provided tag is not defined in this extension
*/
public function process(ContainerBuilder $container)
public function load(array $config, ContainerBuilder $container)
{
require $this->config_file;
$container->setParameter('core.root_path', $this->phpbb_root_path);
$container->setParameter('core.php_ext', $this->php_ext);
require($this->config_file);
$container->setParameter('core.table_prefix', $table_prefix);
$container->setParameter('cache.driver.class', $this->fix_acm_type($acm_type));
@@ -60,10 +51,26 @@ class phpbb_di_processor_config implements phpbb_di_processor_interface
$container->setParameter('dbal.dbname', $dbname);
$container->setParameter('dbal.dbport', $dbport);
$container->setParameter('dbal.new_link', defined('PHPBB_DB_NEW_LINK') && PHPBB_DB_NEW_LINK);
$container->set('container', $container);
}
/**
* Returns the recommended alias to use in XML.
*
* This alias is also the mandatory prefix to use when using YAML.
*
* @return string The alias
*/
public function getAlias()
{
return 'config';
}
/**
* Convert old (3.0) values to 3.1 class names
*
* @param style $acm_type ACM type
* @return ACM type class
*/
protected function fix_acm_type($acm_type)
{
if (preg_match('#^[a-z]+$#', $acm_type))

View File

@@ -0,0 +1,69 @@
<?php
/**
*
* @package phpBB3
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\Config\FileLocator;
/**
* Container core extension
*/
class phpbb_di_extension_core extends Extension
{
/**
* phpBB Root path
* @var string
*/
protected $root_path;
/**
* Constructor
*
* @param string $root_path Root path
*/
public function __construct($root_path)
{
$this->root_path = $root_path;
}
/**
* Loads a specific configuration.
*
* @param array $config An array of configuration values
* @param ContainerBuilder $container A ContainerBuilder instance
*
* @throws InvalidArgumentException When provided tag is not defined in this extension
*/
public function load(array $config, ContainerBuilder $container)
{
$loader = new YamlFileLoader($container, new FileLocator(phpbb_realpath($this->root_path . 'config')));
$loader->load('services.yml');
}
/**
* Returns the recommended alias to use in XML.
*
* This alias is also the mandatory prefix to use when using YAML.
*
* @return string The alias
*/
public function getAlias()
{
return 'core';
}
}

View File

@@ -0,0 +1,69 @@
<?php
/**
*
* @package phpBB3
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\Config\FileLocator;
/**
* Container ext extension
*/
class phpbb_di_extension_ext extends Extension
{
protected $paths = array();
public function __construct($enabled_extensions)
{
foreach ($enabled_extensions as $ext => $path)
{
$this->paths[] = $path;
}
}
/**
* Loads a specific configuration.
*
* @param array $config An array of configuration values
* @param ContainerBuilder $container A ContainerBuilder instance
*
* @throws InvalidArgumentException When provided tag is not defined in this extension
*/
public function load(array $config, ContainerBuilder $container)
{
foreach ($this->paths as $path)
{
if (file_exists($path . '/config/services.yml'))
{
$loader = new YamlFileLoader($container, new FileLocator(phpbb_real_path($path . '/config')));
$loader->load('services.yml');
}
}
}
/**
* Returns the recommended alias to use in XML.
*
* This alias is also the mandatory prefix to use when using YAML.
*
* @return string The alias
*/
public function getAlias()
{
return 'ext';
}
}

View File

@@ -0,0 +1,46 @@
<?php
/**
*
* @package phpBB3
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
/**
* Appends an add method call to the definition of each collection service for
* the services tagged with the appropriate name defined in the collection's
* service_collection tag.
*/
class phpbb_di_pass_collection_pass implements CompilerPassInterface
{
/**
* Modify the container before it is passed to the rest of the code
*
* @param ContainerBuilder $container ContainerBuilder object
* @return null
*/
public function process(ContainerBuilder $container)
{
foreach ($container->findTaggedServiceIds('service_collection') as $id => $data)
{
$definition = $container->getDefinition($id);
foreach ($container->findTaggedServiceIds($data[0]['tag']) as $service_id => $service_data)
{
$definition->addMethodCall('add', array($service_id));
}
}
}
}

View File

@@ -1,54 +0,0 @@
<?php
/**
*
* @package phpBB3
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
/**
* Load the service configurations from all extensions into the container.
*/
class phpbb_di_processor_ext implements phpbb_di_processor_interface
{
private $extension_manager;
/**
* Constructor.
*
* @param string $extension_manager The extension manager
*/
public function __construct($extension_manager)
{
$this->extension_manager = $extension_manager;
}
/**
* @inheritdoc
*/
public function process(ContainerBuilder $container)
{
$enabled_exts = $this->extension_manager->all_enabled();
foreach ($enabled_exts as $name => $path)
{
if (file_exists($path . '/config/services.yml'))
{
$loader = new YamlFileLoader($container, new FileLocator($path . '/config'));
$loader->load('services.yml');
}
}
}
}

View File

@@ -1,28 +0,0 @@
<?php
/**
*
* @package phpBB3
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
use Symfony\Component\DependencyInjection\ContainerBuilder;
interface phpbb_di_processor_interface
{
/**
* Mutate the container.
*
* @param ContainerBuilder $container The container
*/
public function process(ContainerBuilder $container);
}

View File

@@ -0,0 +1,49 @@
<?php
/**
*
* @package phpBB3
* @copyright (c) 2011 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Collection of services to be configured at container compile time.
*
* @package phpBB3
*/
class phpbb_di_service_collection extends ArrayObject
{
/**
* Constructor
*
* @param ContainerInterface $container Container object
*/
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
/**
* Add a service to the collection
*
* @param string $name The service name
* @return null
*/
public function add($name)
{
$task = $this->container->get($name);
$task->set_name($name);
$this->offsetSet($name, $task);
}
}