[DoctrineBundle] removed DoctrineExtension constructor

This commit is contained in:
Fabien Potencier 2010-08-10 15:30:09 +02:00
parent ac8e1e29e9
commit 0f30e539b1
3 changed files with 48 additions and 58 deletions

View File

@ -30,16 +30,6 @@ class DoctrineExtension extends Extension
'dbal' => 'dbal.xml', 'dbal' => 'dbal.xml',
'orm' => 'orm.xml', 'orm' => 'orm.xml',
); );
protected $bundleDirs;
protected $bundles;
protected $kernelCacheDir;
public function __construct(array $bundleDirs, array $bundles, $kernelCacheDir)
{
$this->bundleDirs = $bundleDirs;
$this->bundles = $bundles;
$this->kernelCacheDir = $kernelCacheDir;
}
/** /**
* Loads the DBAL configuration. * Loads the DBAL configuration.
@ -69,7 +59,7 @@ class DoctrineExtension extends Extension
*/ */
public function ormLoad($config, ContainerBuilder $container) public function ormLoad($config, ContainerBuilder $container)
{ {
$this->createOrmProxyDirectory(); $this->createOrmProxyDirectory($container->getParameter('kernel.cache_dir'));
$this->loadOrmDefaults($config, $container); $this->loadOrmDefaults($config, $container);
$this->loadOrmEntityManagers($config, $container); $this->loadOrmEntityManagers($config, $container);
} }
@ -196,10 +186,10 @@ class DoctrineExtension extends Extension
/** /**
* Create the Doctrine ORM Entity proxy directory * Create the Doctrine ORM Entity proxy directory
*/ */
protected function createOrmProxyDirectory() protected function createOrmProxyDirectory($tmpDir)
{ {
// Create entity proxy directory // Create entity proxy directory
$proxyCacheDir = $this->kernelCacheDir . '/doctrine/orm/Proxies'; $proxyCacheDir = $tmpDir.'/doctrine/orm/Proxies';
if (!is_dir($proxyCacheDir)) { if (!is_dir($proxyCacheDir)) {
if (false === @mkdir($proxyCacheDir, 0777, true)) { if (false === @mkdir($proxyCacheDir, 0777, true)) {
die(sprintf('Unable to create the Doctrine Proxy directory (%s)', dirname($proxyCacheDir))); die(sprintf('Unable to create the Doctrine Proxy directory (%s)', dirname($proxyCacheDir)));
@ -265,7 +255,7 @@ class DoctrineExtension extends Extension
protected function loadOrmEntityManager(array $entityManager, ContainerBuilder $container) protected function loadOrmEntityManager(array $entityManager, ContainerBuilder $container)
{ {
$defaultEntityManager = $container->getParameter('doctrine.orm.default_entity_manager'); $defaultEntityManager = $container->getParameter('doctrine.orm.default_entity_manager');
$proxyCacheDir = $this->kernelCacheDir . '/doctrine/orm/Proxies'; $proxyCacheDir = $container->getParameter('kernel.cache_dir').'/doctrine/orm/Proxies';
$ormConfigDef = new Definition('Doctrine\ORM\Configuration'); $ormConfigDef = new Definition('Doctrine\ORM\Configuration');
$container->setDefinition(sprintf('doctrine.orm.%s_configuration', $entityManager['name']), $ormConfigDef); $container->setDefinition(sprintf('doctrine.orm.%s_configuration', $entityManager['name']), $ormConfigDef);
@ -338,9 +328,9 @@ class DoctrineExtension extends Extension
// configure metadata driver for each bundle based on the type of mapping files found // configure metadata driver for each bundle based on the type of mapping files found
$mappingDriverDef = new Definition('%doctrine.orm.metadata.driver_chain_class%'); $mappingDriverDef = new Definition('%doctrine.orm.metadata.driver_chain_class%');
$bundleEntityMappings = array(); $bundleEntityMappings = array();
$bundleDirs = $this->bundleDirs; $bundleDirs = $container->getParameter('kernel.bundle_dirs');
$aliasMap = array(); $aliasMap = array();
foreach ($this->bundles as $className) { foreach ($container->getParameter('kernel.bundles') as $className) {
$tmp = dirname(str_replace('\\', '/', $className)); $tmp = dirname(str_replace('\\', '/', $className));
$namespace = str_replace('/', '\\', dirname($tmp)); $namespace = str_replace('/', '\\', dirname($tmp));
$class = basename($tmp); $class = basename($tmp);
@ -464,7 +454,7 @@ class DoctrineExtension extends Extension
protected function findBundleSubpaths($path, ContainerBuilder $container) protected function findBundleSubpaths($path, ContainerBuilder $container)
{ {
$dirs = array(); $dirs = array();
foreach ($this->bundles as $bundle) { foreach ($container->getParameter('kernel.bundles') as $bundle) {
$reflection = new \ReflectionClass($bundle); $reflection = new \ReflectionClass($bundle);
if (is_dir($dir = dirname($reflection->getFilename()).'/'.$path)) { if (is_dir($dir = dirname($reflection->getFilename()).'/'.$path)) {
$dirs[] = $dir; $dirs[] = $dir;

View File

@ -33,10 +33,6 @@ class DoctrineBundle extends Bundle
*/ */
public function buildContainer(ParameterBagInterface $parameterBag) public function buildContainer(ParameterBagInterface $parameterBag)
{ {
ContainerBuilder::registerExtension(new DoctrineExtension( ContainerBuilder::registerExtension(new DoctrineExtension());
$parameterBag->get('kernel.bundle_dirs'),
$parameterBag->get('kernel.bundles'),
$parameterBag->get('kernel.cache_dir')
));
} }
} }

View File

@ -14,6 +14,7 @@ namespace Symfony\Bundle\DoctrineBundle\Tests\DependencyInjection;
use Symfony\Bundle\DoctrineBundle\Tests\TestCase; use Symfony\Bundle\DoctrineBundle\Tests\TestCase;
use Symfony\Bundle\DoctrineBundle\DependencyInjection\DoctrineExtension; use Symfony\Bundle\DoctrineBundle\DependencyInjection\DoctrineExtension;
use Symfony\Components\DependencyInjection\ContainerBuilder; use Symfony\Components\DependencyInjection\ContainerBuilder;
use Symfony\Components\DependencyInjection\ParameterBag\ParameterBag;
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader; use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Components\DependencyInjection\Loader\YamlFileLoader; use Symfony\Components\DependencyInjection\Loader\YamlFileLoader;
@ -23,8 +24,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testDbalLoad() public function testDbalLoad()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer();
$loader = $this->getDoctrineExtensionLoader(); $loader = new DoctrineExtension();
$loader->dbalLoad(array(), $container); $loader->dbalLoad(array(), $container);
$this->assertEquals('Symfony\\Bundle\\DoctrineBundle\\DataCollector\\DoctrineDataCollector', $container->getParameter('doctrine.data_collector.class'), '->dbalLoad() loads the dbal.xml file if not already loaded'); $this->assertEquals('Symfony\\Bundle\\DoctrineBundle\\DataCollector\\DoctrineDataCollector', $container->getParameter('doctrine.data_collector.class'), '->dbalLoad() loads the dbal.xml file if not already loaded');
@ -36,8 +37,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
$loader->dbalLoad(array(), $container); $loader->dbalLoad(array(), $container);
$this->assertEquals('foo', $container->getParameter('doctrine.dbal.default_connection'), '->dbalLoad() overrides existing configuration options'); $this->assertEquals('foo', $container->getParameter('doctrine.dbal.default_connection'), '->dbalLoad() overrides existing configuration options');
$container = new ContainerBuilder(); $container = $this->getContainer();
$loader = $this->getDoctrineExtensionLoader(); $loader = new DoctrineExtension();
$loader->dbalLoad(array('password' => 'foo'), $container); $loader->dbalLoad(array('password' => 'foo'), $container);
$arguments = $container->getDefinition('doctrine.dbal.default_connection')->getArguments(); $arguments = $container->getDefinition('doctrine.dbal.default_connection')->getArguments();
@ -53,8 +54,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testDbalLoadFromXmlMultipleConnections() public function testDbalLoadFromXmlMultipleConnections()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer();
$loader = $this->getDoctrineExtensionLoader(); $loader = new DoctrineExtension();
$container->registerExtension($loader); $container->registerExtension($loader);
$loadXml = new XmlFileLoader($container, __DIR__.'/Fixtures/config/xml'); $loadXml = new XmlFileLoader($container, __DIR__.'/Fixtures/config/xml');
@ -73,8 +74,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
// doctrine.dbal.sqlite_connection // doctrine.dbal.sqlite_connection
$arguments = $container->getDefinition('doctrine.dbal.sqlite_connection')->getArguments(); $arguments = $container->getDefinition('doctrine.dbal.sqlite_connection')->getArguments();
$container = new ContainerBuilder(); $container = $this->getContainer();
$loader = $this->getDoctrineExtensionLoader(); $loader = new DoctrineExtension();
$container->registerExtension($loader); $container->registerExtension($loader);
$loadXml = new XmlFileLoader($container, __DIR__.'/Fixtures/config/xml'); $loadXml = new XmlFileLoader($container, __DIR__.'/Fixtures/config/xml');
@ -94,8 +95,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testDependencyInjectionConfigurationDefaults() public function testDependencyInjectionConfigurationDefaults()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer();
$loader = $this->getDoctrineExtensionLoader(); $loader = new DoctrineExtension();
$loader->dbalLoad(array(), $container); $loader->dbalLoad(array(), $container);
$loader->ormLoad(array(), $container); $loader->ormLoad(array(), $container);
@ -169,8 +170,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testSingleEntityManagerConfiguration() public function testSingleEntityManagerConfiguration()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer();
$loader = $this->getDoctrineExtensionLoader(); $loader = new DoctrineExtension();
$loader->dbalLoad(array(), $container); $loader->dbalLoad(array(), $container);
$loader->ormLoad(array(), $container); $loader->ormLoad(array(), $container);
@ -191,8 +192,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testLoadSimpleSingleConnection() public function testLoadSimpleSingleConnection()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer();
$loader = $this->getDoctrineExtensionLoader(); $loader = new DoctrineExtension();
$container->registerExtension($loader); $container->registerExtension($loader);
$loader->dbalLoad(array(), $container); $loader->dbalLoad(array(), $container);
@ -225,8 +226,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testLoadSingleConnection() public function testLoadSingleConnection()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer();
$loader = $this->getDoctrineExtensionLoader(); $loader = new DoctrineExtension();
$container->registerExtension($loader); $container->registerExtension($loader);
$this->loadFromFile($container, 'orm_service_single_entity_manager'); $this->loadFromFile($container, 'orm_service_single_entity_manager');
@ -256,8 +257,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testLoadMultipleConnections() public function testLoadMultipleConnections()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer();
$loader = $this->getDoctrineExtensionLoader(); $loader = new DoctrineExtension();
$container->registerExtension($loader); $container->registerExtension($loader);
$this->loadFromFile($container, 'orm_service_multiple_entity_managers'); $this->loadFromFile($container, 'orm_service_multiple_entity_managers');
@ -318,8 +319,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testBundleEntityAliases() public function testBundleEntityAliases()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer();
$loader = $this->getDoctrineExtensionLoader(); $loader = new DoctrineExtension();
$loader->dbalLoad(array(), $container); $loader->dbalLoad(array(), $container);
$loader->ormLoad(array(), $container); $loader->ormLoad(array(), $container);
@ -332,8 +333,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testYamlBundleMappingDetection() public function testYamlBundleMappingDetection()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer('YamlBundle');
$loader = $this->getDoctrineExtensionLoader('YamlBundle'); $loader = new DoctrineExtension();
$loader->dbalLoad(array(), $container); $loader->dbalLoad(array(), $container);
$loader->ormLoad(array(), $container); $loader->ormLoad(array(), $container);
@ -350,8 +351,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testXmlBundleMappingDetection() public function testXmlBundleMappingDetection()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer('XmlBundle');
$loader = $this->getDoctrineExtensionLoader('XmlBundle'); $loader = new DoctrineExtension();
$loader->dbalLoad(array(), $container); $loader->dbalLoad(array(), $container);
$loader->ormLoad(array(), $container); $loader->ormLoad(array(), $container);
@ -368,8 +369,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testAnnotationsBundleMappingDetection() public function testAnnotationsBundleMappingDetection()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer('AnnotationsBundle');
$loader = $this->getDoctrineExtensionLoader('AnnotationsBundle'); $loader = new DoctrineExtension();
$loader->dbalLoad(array(), $container); $loader->dbalLoad(array(), $container);
$loader->ormLoad(array(), $container); $loader->ormLoad(array(), $container);
@ -386,8 +387,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testEntityManagerMetadataCacheDriverConfiguration() public function testEntityManagerMetadataCacheDriverConfiguration()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer();
$loader = $this->getDoctrineExtensionLoader(); $loader = new DoctrineExtension();
$container->registerExtension($loader); $container->registerExtension($loader);
$this->loadFromFile($container, 'orm_service_multiple_entity_managers'); $this->loadFromFile($container, 'orm_service_multiple_entity_managers');
@ -403,8 +404,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testEntityManagerMemcacheMetadataCacheDriverConfiguration() public function testEntityManagerMemcacheMetadataCacheDriverConfiguration()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer();
$loader = $this->getDoctrineExtensionLoader(); $loader = new DoctrineExtension();
$container->registerExtension($loader); $container->registerExtension($loader);
$this->loadFromFile($container, 'orm_service_simple_single_entity_manager'); $this->loadFromFile($container, 'orm_service_simple_single_entity_manager');
@ -429,8 +430,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
public function testDependencyInjectionImportsOverrideDefaults() public function testDependencyInjectionImportsOverrideDefaults()
{ {
$container = new ContainerBuilder(); $container = $this->getContainer();
$loader = $this->getDoctrineExtensionLoader(); $loader = new DoctrineExtension();
$container->registerExtension($loader); $container->registerExtension($loader);
$this->loadFromFile($container, 'orm_imports'); $this->loadFromFile($container, 'orm_imports');
@ -441,11 +442,14 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
$this->assertTrue($container->getParameter('doctrine.orm.auto_generate_proxy_classes')); $this->assertTrue($container->getParameter('doctrine.orm.auto_generate_proxy_classes'));
} }
protected function getDoctrineExtensionLoader($bundle = 'YamlBundle') protected function getContainer($bundle = 'YamlBundle')
{ {
require_once __DIR__.'/Fixtures/Bundles/'.$bundle.'/'.$bundle.'.php'; require_once __DIR__.'/Fixtures/Bundles/'.$bundle.'/'.$bundle.'.php';
$bundleDirs = array('DoctrineBundle\\Tests\\DependencyInjection\\Fixtures\\Bundles' => __DIR__.'/Fixtures/Bundles');
$bundles = array('DoctrineBundle\\Tests\DependencyInjection\\Fixtures\\Bundles\\'.$bundle.'\\'.$bundle); return new ContainerBuilder(new ParameterBag(array(
return new DoctrineExtension($bundleDirs, $bundles, sys_get_temp_dir()); 'kernel.bundle_dirs' => array('DoctrineBundle\\Tests\\DependencyInjection\\Fixtures\\Bundles' => __DIR__.'/Fixtures/Bundles'),
'kernel.bundles' => array('DoctrineBundle\\Tests\DependencyInjection\\Fixtures\\Bundles\\'.$bundle.'\\'.$bundle),
'kernel.cache_dir' => sys_get_temp_dir(),
)));
} }
} }