Skip to content

Commit

Permalink
changed all framework extensions to take advantage of the new extensi…
Browse files Browse the repository at this point in the history
…on configuration inheritance from previous commit
  • Loading branch information
fabpot committed Jun 7, 2010
1 parent b057ef6 commit a7e5f81
Show file tree
Hide file tree
Showing 20 changed files with 486 additions and 160 deletions.
Expand Up @@ -26,17 +26,17 @@
*/
class DoctrineExtension extends LoaderExtension
{
protected $resources = array(
'dbal' => 'dbal.xml',
'orm' => 'orm.xml',
);

protected $resources;
protected $alias;
protected $bundleDirs;
protected $bundles;

public function __construct(array $bundleDirs, array $bundles)
{
$this->resources = array(
'dbal' => 'dbal.xml',
'orm' => 'orm.xml',
);
$this->bundleDirs = $bundleDirs;
$this->bundles = $bundles;
}
Expand All @@ -57,12 +57,12 @@ public function setAlias($alias)
*
* @return BuilderConfiguration A BuilderConfiguration instance
*/
public function dbalLoad($config)
public function dbalLoad($config, BuilderConfiguration $configuration)
{
$configuration = new BuilderConfiguration();

$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
$configuration->merge($loader->load($this->resources['dbal']));
if (!$configuration->hasDefinition('doctrine.dbal.logger')) {
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
$configuration->merge($loader->load($this->resources['dbal']));
}

$defaultConnection = array(
'driver' => 'PDOMySql',
Expand All @@ -76,43 +76,44 @@ public function dbalLoad($config)
'options' => array()
);

$config['default_connection'] = isset($config['default_connection']) ? $config['default_connection'] : 'default';
$defaultConnectionName = isset($config['default_connection']) ? $config['default_connection'] : $configuration->getParameter('doctrine.dbal.default_connection');
$configuration->setAlias('database_connection', null !== $this->alias ? $this->alias : sprintf('doctrine.dbal.%s_connection', $defaultConnectionName));
$configuration->setParameter('doctrine.dbal.default_connection', $defaultConnectionName);

$connections = array();
if (isset($config['connections'])) {
foreach ($config['connections'] as $name => $connection) {
$connections[isset($connection['id']) ? $connection['id'] : $name] = $connection;
}
} else {
$connections = array($config['default_connection'] => $config);
$connections = array($defaultConnectionName => $config);
}

foreach ($connections as $name => $connection) {
$connection = array_merge($defaultConnection, $connection);
$configurationClass = isset($connection['configuration_class']) ?
$connection['configuration_class'] : 'Doctrine\DBAL\Configuration';

$configurationDef = new Definition($configurationClass);
$configurationDef->addMethodCall('setSqlLogger', array(
new Reference('doctrine.dbal.logger')
));
$configuration->setDefinition(
sprintf('doctrine.dbal.%s_connection.configuration', $name),
$configurationDef
);

$eventManagerDef = new Definition($connection['event_manager_class']);
$configuration->setDefinition(
sprintf('doctrine.dbal.%s_connection.event_manager', $name),
$eventManagerDef
);
// previously registered?
if ($configuration->hasDefinition(sprintf('doctrine.dbal.%s_connection', $name))) {
$driverDef = $configuration->getDefinition(sprintf('doctrine.dbal.%s_connection', $name));
$arguments = $driverDef->getArguments();
$driverOptions = $arguments[0];
} else {
$connection = array_merge($defaultConnection, $connection);

$configurationClass = isset($connection['configuration_class']) ? $connection['configuration_class'] : 'Doctrine\DBAL\Configuration';
$configurationDef = new Definition($configurationClass);
$configurationDef->addMethodCall('setSqlLogger', array(new Reference('doctrine.dbal.logger')));
$configuration->setDefinition(sprintf('doctrine.dbal.%s_connection.configuration', $name), $configurationDef);

$eventManagerDef = new Definition($connection['event_manager_class']);
$configuration->setDefinition(sprintf('doctrine.dbal.%s_connection.event_manager', $name), $eventManagerDef);

$driverOptions = array();
$driverDef = new Definition('Doctrine\DBAL\DriverManager');
$driverDef->setConstructor('getConnection');
$configuration->setDefinition(sprintf('doctrine.dbal.%s_connection', $name), $driverDef);
}

$driverOptions = array();
if (isset($connection['driver'])) {
$driverOptions['driverClass'] = sprintf(
'Doctrine\\DBAL\\Driver\\%s\\Driver',
$connection['driver']
);
$driverOptions['driverClass'] = sprintf('Doctrine\\DBAL\\Driver\\%s\\Driver', $connection['driver']);
}
if (isset($connection['wrapper_class'])) {
$driverOptions['wrapperClass'] = $connection['wrapper_class'];
Expand All @@ -125,22 +126,14 @@ public function dbalLoad($config)
$driverOptions[$key] = $connection[$key];
}
}
$driverArgs = array(

$driverDef->setArguments(array(
$driverOptions,
new Reference(sprintf('doctrine.dbal.%s_connection.configuration', $name)),
new Reference(sprintf('doctrine.dbal.%s_connection.event_manager', $name))
);
$driverDef = new Definition('Doctrine\DBAL\DriverManager', $driverArgs);
$driverDef->setConstructor('getConnection');
$configuration->setDefinition(sprintf('doctrine.dbal.%s_connection', $name), $driverDef);
));
}

$configuration->setAlias('database_connection',
null !== $this->alias ? $this->alias : sprintf(
'doctrine.dbal.%s_connection', $config['default_connection']
)
);

return $configuration;
}

Expand All @@ -151,28 +144,26 @@ public function dbalLoad($config)
*
* @return BuilderConfiguration A BuilderConfiguration instance
*/
public function ormLoad($config)
public function ormLoad($config, BuilderConfiguration $configuration)
{
$configuration = new BuilderConfiguration();

$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
$configuration->merge($loader->load($this->resources['orm']));

$config['default_entity_manager'] = isset($config['default_entity_manager']) ? $config['default_entity_manager'] : 'default';
if (isset($config['default_entity_manager'])) {
$configuration->getParameter('doctrine.orm.default_entity_manager', $config['default_entity_manager']);
}
$defaultEntityManager = $configuration->getParameter('doctrine.orm.default_entity_manager');

foreach (array('metadata_driver', 'cache_driver') as $key) {
if (isset($config[$key])) {
$configuration->setParameter('doctrine.orm.'.$key, $config[$key]);
}
}

$config['entity_managers'] = isset($config['entity_managers']) ?
$config['entity_managers'] : array($config['default_entity_manager'] => array())
;
$config['entity_managers'] = isset($config['entity_managers']) ? $config['entity_managers'] : array($defaultEntityManager => array());
foreach ($config['entity_managers'] as $name => $connection) {
$ormConfigDef = new Definition('Doctrine\ORM\Configuration');
$configuration->setDefinition(
sprintf('doctrine.orm.%s_configuration', $name), $ormConfigDef
);
$configuration->setDefinition(sprintf('doctrine.orm.%s_configuration', $name), $ormConfigDef);

$drivers = array('metadata', 'query', 'result');
foreach ($drivers as $driver) {
Expand Down Expand Up @@ -249,7 +240,7 @@ public function ormLoad($config)
$ormEmDef
);

if ($name == $config['default_entity_manager']) {
if ($name == $defaultEntityManager) {
$configuration->setAlias(
'doctrine.orm.entity_manager',
sprintf('doctrine.orm.%s_entity_manager', $name)
Expand Down
Expand Up @@ -6,6 +6,7 @@

<parameters>
<parameter key="doctrine.data_collector.class">Symfony\Framework\DoctrineBundle\DataCollector\DoctrineDataCollector</parameter>
<parameter key="doctrine.dbal.default_connection">default</parameter>
</parameters>

<services>
Expand Down
Expand Up @@ -8,6 +8,7 @@
<parameter key="doctrine.orm.cache_driver">array</parameter>
<parameter key="doctrine.orm.cache.memcache.host">localhost</parameter>
<parameter key="doctrine.orm.cache.memcache.port">11211</parameter>
<parameter key="doctrine.orm.default_entity_manager">default</parameter>
</parameters>

<services>
Expand Down
@@ -0,0 +1,49 @@
<?php

/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Symfony\Framework\DoctrineBundle\Tests\DependencyInjection;

use Symfony\Framework\DoctrineBundle\Tests\TestCase;
use Symfony\Framework\DoctrineBundle\DependencyInjection\DoctrineExtension;
use Symfony\Components\DependencyInjection\BuilderConfiguration;

class DoctrineExtensionTest extends TestCase
{
public function testDbalLoad()
{
$configuration = new BuilderConfiguration();
$loader = new DoctrineExtension(array(), array());

$configuration = $loader->dbalLoad(array(), $configuration);
$this->assertEquals('Symfony\\Framework\\DoctrineBundle\\DataCollector\\DoctrineDataCollector', $configuration->getParameter('doctrine.data_collector.class'), '->dbalLoad() loads the dbal.xml file if not already loaded');

// doctrine.dbal.default_connection
$this->assertEquals('default', $configuration->getParameter('doctrine.dbal.default_connection'), '->dbalLoad() overrides existing configuration options');
$configuration = $loader->dbalLoad(array('default_connection' => 'foo'), $configuration);
$this->assertEquals('foo', $configuration->getParameter('doctrine.dbal.default_connection'), '->dbalLoad() overrides existing configuration options');
$configuration = $loader->dbalLoad(array(), $configuration);
$this->assertEquals('foo', $configuration->getParameter('doctrine.dbal.default_connection'), '->dbalLoad() overrides existing configuration options');

$configuration = new BuilderConfiguration();
$loader = new DoctrineExtension(array(), array());
$configuration = $loader->dbalLoad(array('password' => 'foo'), $configuration);

$arguments = $configuration->getDefinition('doctrine.dbal.default_connection')->getArguments();
$config = $arguments[0];

$this->assertEquals('foo', $config['password']);
$this->assertEquals('root', $config['user']);

$configuration = $loader->dbalLoad(array('user' => 'foo'), $configuration);
$this->assertEquals('foo', $config['password']);
$this->assertEquals('root', $config['user']);
}
}
Expand Up @@ -24,14 +24,15 @@
*/
class ProfilerExtension extends LoaderExtension
{
public function configLoad($config)
public function configLoad($config, BuilderConfiguration $configuration)
{
$configuration = new BuilderConfiguration();

$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
$configuration->merge($loader->load('collectors.xml'));
if (!$configuration->hasDefinition('data_collector_manager')) {
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
$configuration->merge($loader->load('collectors.xml'));
}

if (isset($config['toolbar']) && $config['toolbar']) {
if (isset($config['toolbar']) && $config['toolbar'] && !$configuration->hasDefinition('debug.toolbar')) {
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
$configuration->merge($loader->load('toolbar.xml'));
}

Expand Down
@@ -0,0 +1,32 @@
<?php

/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Symfony\Framework\ProfilerBundle\Tests\DependencyInjection;

use Symfony\Framework\ProfilerBundle\Tests\TestCase;
use Symfony\Framework\ProfilerBundle\DependencyInjection\ProfilerExtension;
use Symfony\Components\DependencyInjection\BuilderConfiguration;

class ProfilerExtensionTest extends TestCase
{
public function testLoggerLoad()
{
$configuration = new BuilderConfiguration();
$loader = new ProfilerExtension();

$configuration = $loader->configLoad(array(), $configuration);
$this->assertEquals('Symfony\\Framework\\ProfilerBundle\\DataCollector\\DataCollectorManager', $configuration->getParameter('data_collector_manager.class'), '->configLoad() loads the collectors.xml file if not already loaded');
$this->assertFalse($configuration->hasParameter('debug.toolbar.class'), '->configLoad() does not load the toolbar.xml file');

$configuration = $loader->configLoad(array('toolbar' => true), $configuration);
$this->assertEquals('Symfony\\Framework\\ProfilerBundle\\Listener\\WebDebugToolbar', $configuration->getParameter('debug.toolbar.class'), '->configLoad() loads the collectors.xml file if the toolbar option is given');
}
}

0 comments on commit a7e5f81

Please sign in to comment.