[DoctrineBundle] Refactoring DoctrineBundle to match DoctrineMongoDBBundle
This commit is contained in:
parent
2c1e85c3c0
commit
ef070d0dd1
@ -1,75 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Symfony\Bundle\DoctrineBundle\Controller;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller;
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony framework.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Doctrine ORM controller gives you access to entity managers and DQL queries.
|
||||
*
|
||||
* @package Symfony
|
||||
* @subpackage Bundle_DoctrineBundle
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
* @author Jonathan H. Wage <jonwage@gmail.com>
|
||||
*/
|
||||
class DoctrineController extends Controller
|
||||
{
|
||||
public function getDatabaseConnection($name = null)
|
||||
{
|
||||
if ($name) {
|
||||
return $this->container->get(sprintf('doctrine.dbal.%s_connection', $name));
|
||||
} else {
|
||||
return $this->container->getDatabaseConnectionService();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the default entity manager service or the entity manager
|
||||
* with the given name.
|
||||
*
|
||||
* @param string $name Optional entity manager service name
|
||||
*
|
||||
* @return object
|
||||
*/
|
||||
protected function getEntityManager($name = null)
|
||||
{
|
||||
if ($name) {
|
||||
return $this->container->get(sprintf('doctrine.orm.%s_entity_manager', $name));
|
||||
} else {
|
||||
return $this->container->getDoctrine_ORM_EntityManagerService();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new QueryBuilder instance.
|
||||
*
|
||||
* @param string $name Optional entity manager service name
|
||||
* @return object QueryBuilder
|
||||
*/
|
||||
public function createQueryBuilder($name = null)
|
||||
{
|
||||
return $this->getEntityManager($name)->createQueryBuilder();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new Query instance.
|
||||
*
|
||||
* @param string $dql Optional Dql string to create the query from
|
||||
* @param string $name Optional entity manager service name
|
||||
*
|
||||
* @return object QueryBuilder
|
||||
*/
|
||||
public function createQuery($dql = '', $name = null)
|
||||
{
|
||||
return $this->getEntityManager($name)->createQuery($dql);
|
||||
}
|
||||
}
|
@ -7,6 +7,7 @@ use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Definition;
|
||||
use Symfony\Components\DependencyInjection\Reference;
|
||||
use Symfony\Components\DependencyInjection\Resource\FileResource;
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony framework.
|
||||
@ -22,6 +23,7 @@ use Symfony\Components\DependencyInjection\Reference;
|
||||
*
|
||||
* @package Symfony
|
||||
* @subpackage Bundle_DoctrineBundle
|
||||
* @author Jonathan H. Wage <jonwage@gmail.com>
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*/
|
||||
class DoctrineExtension extends Extension
|
||||
@ -30,7 +32,6 @@ class DoctrineExtension extends Extension
|
||||
'dbal' => 'dbal.xml',
|
||||
'orm' => 'orm.xml',
|
||||
);
|
||||
protected $alias;
|
||||
protected $bundleDirs;
|
||||
protected $bundles;
|
||||
protected $kernelCacheDir;
|
||||
@ -42,28 +43,131 @@ class DoctrineExtension extends Extension
|
||||
$this->kernelCacheDir = $kernelCacheDir;
|
||||
}
|
||||
|
||||
public function setAlias($alias)
|
||||
{
|
||||
$this->alias = $alias;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the DBAL configuration.
|
||||
*
|
||||
* Usage example:
|
||||
*
|
||||
* <doctrine:dbal dbname="sfweb" user="root" />
|
||||
* <doctrine:dbal id="myconn" dbname="sfweb" user="root" />
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
public function dbalLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
$this->loadDbalDefaults($config, $container);
|
||||
$this->loadDbalConnections($config, $container);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the Doctrine ORM configuration.
|
||||
*
|
||||
* Usage example:
|
||||
*
|
||||
* <doctrine:orm id="mydm" connection="myconn" />
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
public function ormLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
$this->createOrmProxyDirectory();
|
||||
$this->loadOrmDefaults($config, $container);
|
||||
$this->loadOrmEntityManagers($config, $container);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the DBAL configuration defaults.
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadDbalDefaults(array $config, ContainerBuilder $container)
|
||||
{
|
||||
if (!$container->hasDefinition('doctrine.dbal.logger')) {
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load($this->resources['dbal']);
|
||||
}
|
||||
|
||||
$defaultConnectionName = isset($config['default_connection']) ? $config['default_connection'] : $container->getParameter('doctrine.dbal.default_connection');
|
||||
$container->setAlias('database_connection', sprintf('doctrine.dbal.%s_connection', $defaultConnectionName));
|
||||
$container->setParameter('doctrine.dbal.default_connection', $defaultConnectionName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the configured DBAL connections.
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadDbalConnections(array $config, ContainerBuilder $container)
|
||||
{
|
||||
$connections = $this->getDbalConnections($config, $container);
|
||||
foreach ($connections as $name => $connection) {
|
||||
$connection['name'] = $name;
|
||||
$this->loadDbalConnection($connection, $container);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a configured DBAL connection.
|
||||
*
|
||||
* @param array $connection A dbal connection configuration.
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadDbalConnection(array $connection, ContainerBuilder $container)
|
||||
{
|
||||
// previously registered?
|
||||
if ($container->hasDefinition(sprintf('doctrine.dbal.%s_connection', $connection['name']))) {
|
||||
$driverDef = $container->getDefinition(sprintf('doctrine.dbal.%s_connection', $connection['name']));
|
||||
$arguments = $driverDef->getArguments();
|
||||
$driverOptions = $arguments[0];
|
||||
} else {
|
||||
$containerClass = isset($connection['configuration_class']) ? $connection['configuration_class'] : 'Doctrine\DBAL\Configuration';
|
||||
$containerDef = new Definition($containerClass);
|
||||
$containerDef->addMethodCall('setSqlLogger', array(new Reference('doctrine.dbal.logger')));
|
||||
$container->setDefinition(sprintf('doctrine.dbal.%s_connection.configuration', $connection['name']), $containerDef);
|
||||
|
||||
$eventManagerDef = new Definition($connection['event_manager_class']);
|
||||
$container->setDefinition(sprintf('doctrine.dbal.%s_connection.event_manager', $connection['name']), $eventManagerDef);
|
||||
|
||||
$driverOptions = array();
|
||||
$driverDef = new Definition('Doctrine\DBAL\DriverManager');
|
||||
$driverDef->setFactoryMethod('getConnection');
|
||||
$container->setDefinition(sprintf('doctrine.dbal.%s_connection', $connection['name']), $driverDef);
|
||||
}
|
||||
|
||||
if (isset($connection['driver'])) {
|
||||
$driverOptions['driverClass'] = sprintf('Doctrine\\DBAL\\Driver\\%s\\Driver', $connection['driver']);
|
||||
}
|
||||
if (isset($connection['wrapper_class'])) {
|
||||
$driverOptions['wrapperClass'] = $connection['wrapper_class'];
|
||||
}
|
||||
if (isset($connection['options'])) {
|
||||
$driverOptions['driverOptions'] = $connection['options'];
|
||||
}
|
||||
foreach (array('dbname', 'host', 'user', 'password', 'path', 'memory', 'port', 'unix_socket', 'charset') as $key) {
|
||||
if (isset($connection[$key])) {
|
||||
$driverOptions[$key] = $connection[$key];
|
||||
}
|
||||
}
|
||||
|
||||
$driverDef->setArguments(array(
|
||||
$driverOptions,
|
||||
new Reference(sprintf('doctrine.dbal.%s_connection.configuration', $connection['name'])),
|
||||
new Reference(sprintf('doctrine.dbal.%s_connection.event_manager', $connection['name']))
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the configured DBAL connections.
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function getDbalConnections(array $config, ContainerBuilder $container)
|
||||
{
|
||||
$defaultConnectionName = $container->getParameter('doctrine.dbal.default_connection');
|
||||
$defaultConnection = array(
|
||||
'driver' => 'PDOMySql',
|
||||
'user' => 'root',
|
||||
@ -75,217 +179,315 @@ class DoctrineExtension extends Extension
|
||||
'wrapper_class' => null,
|
||||
'options' => array()
|
||||
);
|
||||
|
||||
$defaultConnectionName = isset($config['default_connection']) ? $config['default_connection'] : $container->getParameter('doctrine.dbal.default_connection');
|
||||
$container->setAlias('database_connection', null !== $this->alias ? $this->alias : sprintf('doctrine.dbal.%s_connection', $defaultConnectionName));
|
||||
$container->setParameter('doctrine.dbal.default_connection', $defaultConnectionName);
|
||||
|
||||
$connections = array();
|
||||
if (isset($config['connections'])) {
|
||||
$config_connections = $config['connections'];
|
||||
$configConnections = $config['connections'];
|
||||
if(isset($config['connections']['connection']) && isset($config['connections']['connection'][0])) {
|
||||
// Multiple connections
|
||||
$config_connections = $config['connections']['connection'];
|
||||
$configConnections = $config['connections']['connection'];
|
||||
}
|
||||
foreach ($config_connections as $name => $connection) {
|
||||
$connections[isset($connection['id']) ? $connection['id'] : $name] = $connection;
|
||||
foreach ($configConnections as $name => $connection) {
|
||||
$connections[isset($connection['id']) ? $connection['id'] : $name] = array_merge($defaultConnection, $connection);
|
||||
}
|
||||
} else {
|
||||
$connections = array($defaultConnectionName => $config);
|
||||
$connections = array($defaultConnectionName => array_merge($defaultConnection, $config));
|
||||
}
|
||||
return $connections;
|
||||
}
|
||||
|
||||
foreach ($connections as $name => $connection) {
|
||||
// previously registered?
|
||||
if ($container->hasDefinition(sprintf('doctrine.dbal.%s_connection', $name))) {
|
||||
$driverDef = $container->getDefinition(sprintf('doctrine.dbal.%s_connection', $name));
|
||||
$arguments = $driverDef->getArguments();
|
||||
$driverOptions = $arguments[0];
|
||||
} else {
|
||||
$connection = array_merge($defaultConnection, $connection);
|
||||
|
||||
$containerClass = isset($connection['configuration_class']) ? $connection['configuration_class'] : 'Doctrine\DBAL\Configuration';
|
||||
$containerDef = new Definition($containerClass);
|
||||
$containerDef->addMethodCall('setSqlLogger', array(new Reference('doctrine.dbal.logger')));
|
||||
$container->setDefinition(sprintf('doctrine.dbal.%s_connection.configuration', $name), $containerDef);
|
||||
|
||||
$eventManagerDef = new Definition($connection['event_manager_class']);
|
||||
$container->setDefinition(sprintf('doctrine.dbal.%s_connection.event_manager', $name), $eventManagerDef);
|
||||
|
||||
$driverOptions = array();
|
||||
$driverDef = new Definition('Doctrine\DBAL\DriverManager');
|
||||
$driverDef->setFactoryMethod('getConnection');
|
||||
$container->setDefinition(sprintf('doctrine.dbal.%s_connection', $name), $driverDef);
|
||||
/**
|
||||
* Create the Doctrine ORM Entity proxy directory
|
||||
*/
|
||||
protected function createOrmProxyDirectory()
|
||||
{
|
||||
// Create entity proxy directory
|
||||
$proxyCacheDir = $this->kernelCacheDir . '/doctrine/orm/Proxies';
|
||||
if (!is_dir($proxyCacheDir)) {
|
||||
if (false === @mkdir($proxyCacheDir, 0777, true)) {
|
||||
die(sprintf('Unable to create the Doctrine Proxy directory (%s)', dirname($proxyCacheDir)));
|
||||
}
|
||||
|
||||
if (isset($connection['driver'])) {
|
||||
$driverOptions['driverClass'] = sprintf('Doctrine\\DBAL\\Driver\\%s\\Driver', $connection['driver']);
|
||||
}
|
||||
if (isset($connection['wrapper_class'])) {
|
||||
$driverOptions['wrapperClass'] = $connection['wrapper_class'];
|
||||
}
|
||||
if (isset($connection['options'])) {
|
||||
$driverOptions['driverOptions'] = $connection['options'];
|
||||
}
|
||||
foreach (array('dbname', 'host', 'user', 'password', 'path', 'memory', 'port', 'unix_socket', 'charset') as $key) {
|
||||
if (isset($connection[$key])) {
|
||||
$driverOptions[$key] = $connection[$key];
|
||||
}
|
||||
}
|
||||
|
||||
$driverDef->setArguments(array(
|
||||
$driverOptions,
|
||||
new Reference(sprintf('doctrine.dbal.%s_connection.configuration', $name)),
|
||||
new Reference(sprintf('doctrine.dbal.%s_connection.event_manager', $name))
|
||||
));
|
||||
} elseif (!is_writable($proxyCacheDir)) {
|
||||
die(sprintf('Unable to write in the Doctrine Proxy directory (%s)', $proxyCacheDir));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the Doctrine ORM configuration.
|
||||
* Loads the ORM default configuration.
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
public function ormLoad($config, ContainerBuilder $container)
|
||||
protected function loadOrmDefaults(array $config, ContainerBuilder $container)
|
||||
{
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load($this->resources['orm']);
|
||||
|
||||
if (isset($config['default_entity_manager'])) {
|
||||
$container->getParameter('doctrine.orm.default_entity_manager', $config['default_entity_manager']);
|
||||
}
|
||||
$defaultEntityManager = $container->getParameter('doctrine.orm.default_entity_manager');
|
||||
|
||||
foreach (array('metadata_driver', 'cache_driver') as $key) {
|
||||
// Allow these application configuration options to override the defaults
|
||||
$options = array(
|
||||
'default_entity_manager',
|
||||
'default_connection',
|
||||
'metadata_cache_driver',
|
||||
'query_cache_driver',
|
||||
'result_cache_driver',
|
||||
'proxy_namespace',
|
||||
'auto_generate_proxy_classes'
|
||||
);
|
||||
foreach ($options as $key) {
|
||||
if (isset($config[$key])) {
|
||||
$container->setParameter('doctrine.orm.'.$key, $config[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
$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');
|
||||
$container->setDefinition(sprintf('doctrine.orm.%s_configuration', $name), $ormConfigDef);
|
||||
|
||||
$drivers = array('metadata', 'query', 'result');
|
||||
foreach ($drivers as $driver) {
|
||||
$definition = $container->getDefinition(sprintf('doctrine.orm.cache.%s', $container->getParameter('doctrine.orm.cache_driver')));
|
||||
$clone = clone $definition;
|
||||
$clone->addMethodCall('setNamespace', array(sprintf('doctrine_%s_', $driver)));
|
||||
$container->setDefinition(sprintf('doctrine.orm.%s_cache', $driver), $clone);
|
||||
}
|
||||
|
||||
// configure metadata driver for each bundle based on the type of mapping files found
|
||||
$mappingDriverDef = new Definition('Doctrine\ORM\Mapping\Driver\DriverChain');
|
||||
$bundleEntityMappings = array();
|
||||
$bundleDirs = $this->bundleDirs;
|
||||
$aliasMap = array();
|
||||
foreach ($this->bundles as $className) {
|
||||
$tmp = dirname(str_replace('\\', '/', $className));
|
||||
$namespace = str_replace('/', '\\', dirname($tmp));
|
||||
$class = basename($tmp);
|
||||
|
||||
if (!isset($bundleDirs[$namespace])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$type = false;
|
||||
if (is_dir($dir = $bundleDirs[$namespace].'/'.$class.'/Resources/config/doctrine/metadata')) {
|
||||
$type = $this->detectMappingType($dir);
|
||||
}
|
||||
|
||||
if (is_dir($dir = $bundleDirs[$namespace].'/'.$class.'/Entities')) {
|
||||
if ($type === false) {
|
||||
$type = 'annotation';
|
||||
}
|
||||
$aliasMap[$class] = $namespace.'\\'.$class.'\\Entities';
|
||||
}
|
||||
|
||||
if (false !== $type) {
|
||||
$mappingDriverDef->addMethodCall('addDriver', array(
|
||||
new Reference(sprintf('doctrine.orm.metadata_driver.%s', $type)),
|
||||
$namespace.'\\'.$class.'\\Entities'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
$ormConfigDef->addMethodCall('setEntityNamespaces', array($aliasMap));
|
||||
|
||||
$container->setDefinition('doctrine.orm.metadata_driver', $mappingDriverDef);
|
||||
|
||||
$proxyCacheDir = $this->kernelCacheDir . '/doctrine/orm/Proxies';
|
||||
if (!is_dir($proxyCacheDir)) {
|
||||
if (false === @mkdir($proxyCacheDir, 0777, true)) {
|
||||
die(sprintf('Unable to create the Doctrine Proxy directory (%s)', dirname($proxyCacheDir)));
|
||||
}
|
||||
} elseif (!is_writable($proxyCacheDir)) {
|
||||
die(sprintf('Unable to write in the Doctrine Proxy directory (%s)', $proxyCacheDir));
|
||||
}
|
||||
|
||||
$methods = array(
|
||||
'setMetadataCacheImpl' => new Reference('doctrine.orm.metadata_cache'),
|
||||
'setQueryCacheImpl' => new Reference('doctrine.orm.query_cache'),
|
||||
'setResultCacheImpl' => new Reference('doctrine.orm.result_cache'),
|
||||
'setMetadataDriverImpl' => new Reference('doctrine.orm.metadata_driver'),
|
||||
'setProxyDir' => $proxyCacheDir,
|
||||
'setProxyNamespace' => 'Proxies',
|
||||
'setAutoGenerateProxyClasses' => true
|
||||
);
|
||||
|
||||
foreach ($methods as $method => $arg) {
|
||||
$ormConfigDef->addMethodCall($method, array($arg));
|
||||
}
|
||||
|
||||
$ormEmArgs = array(
|
||||
new Reference(
|
||||
sprintf('doctrine.dbal.%s_connection',
|
||||
isset($connection['connection']) ? $connection['connection'] : $name)
|
||||
),
|
||||
new Reference(sprintf('doctrine.orm.%s_configuration', $name))
|
||||
);
|
||||
$ormEmDef = new Definition('Doctrine\ORM\EntityManager', $ormEmArgs);
|
||||
$ormEmDef->setFactoryMethod('create');
|
||||
|
||||
$container->setDefinition(
|
||||
sprintf('doctrine.orm.%s_entity_manager', $name),
|
||||
$ormEmDef
|
||||
);
|
||||
|
||||
if ($name == $defaultEntityManager) {
|
||||
$container->setAlias(
|
||||
'doctrine.orm.entity_manager',
|
||||
sprintf('doctrine.orm.%s_entity_manager', $name)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$container->setAlias(
|
||||
'doctrine.orm.cache',
|
||||
sprintf(
|
||||
'doctrine.orm.cache.%s',
|
||||
$container->getParameter('doctrine.orm.cache_driver')
|
||||
)
|
||||
);
|
||||
$container->setParameter('doctrine.orm.mapping_dirs', $this->findBundleSubpaths('Resources/config/doctrine/metadata', $container));
|
||||
$container->setParameter('doctrine.orm.entity_dirs', $this->findBundleSubpaths('Entity', $container));
|
||||
}
|
||||
|
||||
/**
|
||||
* Detect the type of Doctrine 2 mapping files located in a given directory.
|
||||
* Simply finds the first file in a directory and returns the extension. If no
|
||||
* mapping files are found then the annotation type is returned.
|
||||
* Loads the configured ORM entity managers.
|
||||
*
|
||||
* @param string $dir
|
||||
*
|
||||
* @return string
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function detectMappingType($dir)
|
||||
protected function loadOrmEntityManagers(array $config, ContainerBuilder $container)
|
||||
{
|
||||
$files = glob($dir.'/*.*');
|
||||
if (!$files) {
|
||||
$entityManagers = $this->getOrmEntityManagers($config, $container);
|
||||
foreach ($entityManagers as $name => $entityManager) {
|
||||
$entityManager['name'] = $name;
|
||||
$this->loadOrmEntityManager($entityManager, $container);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a configured ORM entity manager.
|
||||
*
|
||||
* @param array $entityManager A configured ORM entity manager.
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadOrmEntityManager(array $entityManager, ContainerBuilder $container)
|
||||
{
|
||||
$defaultEntityManager = $container->getParameter('doctrine.orm.default_entity_manager');
|
||||
$proxyCacheDir = $this->kernelCacheDir . '/doctrine/orm/Proxies';
|
||||
|
||||
$ormConfigDef = new Definition('Doctrine\ORM\Configuration');
|
||||
$container->setDefinition(sprintf('doctrine.orm.%s_configuration', $entityManager['name']), $ormConfigDef);
|
||||
|
||||
$this->loadOrmEntityManagerBundlesMappingInformation($entityManager, $ormConfigDef, $container);
|
||||
$this->loadOrmCacheDrivers($entityManager, $container);
|
||||
|
||||
$methods = array(
|
||||
'setMetadataCacheImpl' => new Reference('doctrine.orm.metadata_cache'),
|
||||
'setQueryCacheImpl' => new Reference('doctrine.orm.query_cache'),
|
||||
'setResultCacheImpl' => new Reference('doctrine.orm.result_cache'),
|
||||
'setMetadataDriverImpl' => new Reference('doctrine.orm.metadata_driver'),
|
||||
'setProxyDir' => $proxyCacheDir,
|
||||
'setProxyNamespace' => $container->getParameter('doctrine.orm.proxy_namespace'),
|
||||
'setAutoGenerateProxyClasses' => $container->getParameter('doctrine.orm.auto_generate_proxy_classes')
|
||||
);
|
||||
foreach ($methods as $method => $arg) {
|
||||
$ormConfigDef->addMethodCall($method, array($arg));
|
||||
}
|
||||
|
||||
$ormEmArgs = array(
|
||||
new Reference(sprintf('doctrine.dbal.%s_connection', isset($entityManager['connection']) ? $entityManager['connection'] : $entityManager['name'])),
|
||||
new Reference(sprintf('doctrine.orm.%s_configuration', $entityManager['name']))
|
||||
);
|
||||
$ormEmDef = new Definition('%doctrine.orm.entity_manager_class%', $ormEmArgs);
|
||||
$ormEmDef->setFactoryMethod('create');
|
||||
$container->setDefinition(sprintf('doctrine.orm.%s_entity_manager', $entityManager['name']), $ormEmDef);
|
||||
|
||||
if ($entityManager['name'] == $defaultEntityManager) {
|
||||
$container->setAlias(
|
||||
'doctrine.orm.entity_manager',
|
||||
sprintf('doctrine.orm.%s_entity_manager', $entityManager['name'])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the configured entity managers.
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function getOrmEntityManagers(array $config, ContainerBuilder $container)
|
||||
{
|
||||
$defaultEntityManager = $container->getParameter('doctrine.orm.default_entity_manager');
|
||||
$entityManagers = array();
|
||||
if (isset($config['entity_managers'])) {
|
||||
$configEntityManagers = $config['entity_managers'];
|
||||
if (isset($config['entity_managers']['entity_manager']) && isset($config['entity_managers']['entity_manager'][0])) {
|
||||
// Multiple entity managers
|
||||
$configEntityManagers = $config['entity_managers']['entity_manager'];
|
||||
}
|
||||
foreach ($configEntityManagers as $name => $entityManager) {
|
||||
$entityManagers[isset($entityManager['id']) ? $entityManager['id'] : $name] = $entityManager;
|
||||
}
|
||||
} else {
|
||||
$entityManagers = array($defaultEntityManager => $config);
|
||||
}
|
||||
return $entityManagers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads an ORM entity managers bundle mapping information.
|
||||
*
|
||||
* @param array $entityManager A configured ORM entity manager.
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadOrmEntityManagerBundlesMappingInformation(array $entityManager, Definition $ormConfigDef, ContainerBuilder $container)
|
||||
{
|
||||
// configure metadata driver for each bundle based on the type of mapping files found
|
||||
$mappingDriverDef = new Definition('%doctrine.orm.metadata.driver_chain_class%');
|
||||
$bundleEntityMappings = array();
|
||||
$bundleDirs = $this->bundleDirs;
|
||||
$aliasMap = array();
|
||||
foreach ($this->bundles as $className) {
|
||||
$tmp = dirname(str_replace('\\', '/', $className));
|
||||
$namespace = str_replace('/', '\\', dirname($tmp));
|
||||
$class = basename($tmp);
|
||||
|
||||
if (!isset($bundleDirs[$namespace])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$type = $this->detectMetadataDriver($bundleDirs[$namespace].'/'.$class, $container);
|
||||
|
||||
if (is_dir($dir = $bundleDirs[$namespace].'/'.$class.'/Entity')) {
|
||||
if ($type === null) {
|
||||
$type = 'annotation';
|
||||
}
|
||||
$aliasMap[$class] = $namespace.'\\'.$class.'\\Entity';
|
||||
}
|
||||
|
||||
if ($type !== null) {
|
||||
$mappingDriverDef->addMethodCall('addDriver', array(
|
||||
new Reference(sprintf('doctrine.orm.metadata_driver.%s', $type)),
|
||||
$namespace.'\\'.$class.'\\Entity'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
$ormConfigDef->addMethodCall('setEntityNamespaces', array($aliasMap));
|
||||
|
||||
$container->setDefinition('doctrine.orm.metadata_driver', $mappingDriverDef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a configured entity managers cache drivers.
|
||||
*
|
||||
* @param array $entityManager A configured ORM entity manager.
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadOrmCacheDrivers(array $entityManager, ContainerBuilder $container)
|
||||
{
|
||||
$this->loadOrmEntityManagerMetadataCacheDriver($entityManager, $container);
|
||||
$this->loadOrmEntityManagerQueryCacheDriver($entityManager, $container);
|
||||
$this->loadOrmEntityManagerResultCacheDriver($entityManager, $container);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a configured entity managers metadata cache driver.
|
||||
*
|
||||
* @param array $entityManager A configured ORM entity manager.
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadOrmEntityManagerMetadataCacheDriver(array $entityManager, ContainerBuilder $container)
|
||||
{
|
||||
$metadataCacheDriver = $container->getParameter('doctrine.orm.metadata_cache_driver');
|
||||
$emMetadataCacheDriver = isset($entityManager['metadata_cache_driver']) ? $entityManager['metadata_cache_driver'] : $metadataCacheDriver;
|
||||
$type = is_array($emMetadataCacheDriver) && isset($emMetadataCacheDriver['type']) ? $emMetadataCacheDriver['type'] : $emMetadataCacheDriver;
|
||||
|
||||
if ($type === 'memcache') {
|
||||
$memcacheClass = isset($emMetadataCacheDriver['class']) ? $emMetadataCacheDriver['class'] : '%'.sprintf('doctrine.orm.cache.%s_class', $type).'%';
|
||||
$cacheDef = new Definition($memcacheClass);
|
||||
$memcacheHost = isset($emMetadataCacheDriver['host']) ? $emMetadataCacheDriver['host'] : '%doctrine.orm.cache.memcache_host%';
|
||||
$memcachePort = isset($emMetadataCacheDriver['port']) ? $emMetadataCacheDriver['port'] : '%doctrine.orm.cache.memcache_port%';
|
||||
$memcacheInstanceClass = isset($emMetadataCacheDriver['instance_class']) ? $emMetadataCacheDriver['instance_class'] : '%doctrine.orm.cache.memcache_instance_class%';
|
||||
$memcacheInstance = new Definition($memcacheInstanceClass);
|
||||
$memcacheInstance->addMethodCall('connect', array($memcacheHost, $memcachePort));
|
||||
$container->setDefinition(sprintf('doctrine.orm.%s_memcache_instance', $entityManager['name']), $memcacheInstance);
|
||||
$cacheDef->addMethodCall('setMemcache', array(new Reference(sprintf('doctrine.orm.%s_memcache_instance', $entityManager['name']))));
|
||||
} else {
|
||||
$cacheDef = new Definition('%'.sprintf('doctrine.orm.cache.%s_class', $type).'%');
|
||||
}
|
||||
$container->setDefinition(sprintf('doctrine.orm.%s_metadata_cache', $entityManager['name']), $cacheDef);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a configured entity managers query cache driver.
|
||||
*
|
||||
* @param array $entityManager A configured ORM entity manager.
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadOrmEntityManagerQueryCacheDriver(array $entityManager, ContainerBuilder $container)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a configured entity managers result cache driver.
|
||||
*
|
||||
* @param array $entityManager A configured ORM entity manager.
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadOrmEntityManagerResultCacheDriver(array $entityManager, ContainerBuilder $container)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds existing bundle subpaths.
|
||||
*
|
||||
* @param string $path A subpath to check for
|
||||
* @param ContainerBuilder $container A ContainerBuilder configuration
|
||||
*
|
||||
* @return array An array of absolute directory paths
|
||||
*/
|
||||
protected function findBundleSubpaths($path, ContainerBuilder $container)
|
||||
{
|
||||
$dirs = array();
|
||||
foreach ($this->bundles as $bundle) {
|
||||
$reflection = new \ReflectionClass($bundle);
|
||||
if (is_dir($dir = dirname($reflection->getFilename()).'/'.$path)) {
|
||||
$dirs[] = $dir;
|
||||
$container->addResource(new FileResource($dir));
|
||||
} else {
|
||||
// add the closest existing parent directory as a file resource
|
||||
do {
|
||||
$dir = dirname($dir);
|
||||
} while (!is_dir($dir));
|
||||
$container->addResource(new FileResource($dir));
|
||||
}
|
||||
}
|
||||
return $dirs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Detects what metadata driver to use for the supplied directory.
|
||||
*
|
||||
* @param string $dir A directory path
|
||||
* @param ContainerBuilder $container A ContainerBuilder configuration
|
||||
*
|
||||
* @return string|null A metadata driver short name, if one can be detected
|
||||
*/
|
||||
static protected function detectMetadataDriver($dir, ContainerBuilder $container)
|
||||
{
|
||||
// add the closest existing directory as a resource
|
||||
$resource = $dir.'/Resources/config/doctrine/metadata';
|
||||
while (!is_dir($resource)) {
|
||||
$resource = dirname($resource);
|
||||
}
|
||||
$container->addResource(new FileResource($resource));
|
||||
|
||||
if (count(glob($dir.'/Resources/config/doctrine/metadata/*.xml'))) {
|
||||
return 'xml';
|
||||
} elseif (count(glob($dir.'/Resources/config/doctrine/metadata/*.yml'))) {
|
||||
return 'yml';
|
||||
}
|
||||
|
||||
// add the directory itself as a resource
|
||||
$container->addResource(new FileResource($dir));
|
||||
|
||||
if (is_dir($dir.'/Entity')) {
|
||||
return 'annotation';
|
||||
}
|
||||
$info = pathinfo($files[0]);
|
||||
|
||||
return $info['extension'];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -319,4 +521,4 @@ class DoctrineExtension extends Extension
|
||||
{
|
||||
return 'doctrine';
|
||||
}
|
||||
}
|
||||
}
|
@ -37,29 +37,10 @@ class DoctrineBundle extends Bundle
|
||||
*/
|
||||
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')
|
||||
));
|
||||
$metadataDirs = array();
|
||||
$entityDirs = array();
|
||||
$bundleDirs = $parameterBag->get('kernel.bundle_dirs');
|
||||
foreach ($parameterBag->get('kernel.bundles') as $className) {
|
||||
$tmp = dirname(str_replace('\\', '/', $className));
|
||||
$namespace = str_replace('/', '\\', dirname($tmp));
|
||||
$class = basename($tmp);
|
||||
|
||||
if (isset($bundleDirs[$namespace])) {
|
||||
if (is_dir($dir = $bundleDirs[$namespace].'/'.$class.'/Resources/config/doctrine/metadata')) {
|
||||
$metadataDirs[] = realpath($dir);
|
||||
}
|
||||
if (is_dir($dir = $bundleDirs[$namespace].'/'.$class.'/Entities')) {
|
||||
$entityDirs[] = realpath($dir);
|
||||
}
|
||||
}
|
||||
}
|
||||
$parameterBag->set('doctrine.orm.metadata_driver.mapping_dirs', $metadataDirs);
|
||||
$parameterBag->set('doctrine.orm.entity_dirs', $entityDirs);
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,9 @@
|
||||
xsi:schemaLocation="http://www.symfony-project.org/schema/dic/services http://www.symfony-project.org/schema/dic/services/services-1.0.xsd">
|
||||
|
||||
<parameters>
|
||||
<parameter key="doctrine.dbal.default_connection">default</parameter>
|
||||
<parameter key="doctrine.dbal.connection_class">Doctrine\DBAL\Connection</parameter>
|
||||
|
||||
<parameter key="doctrine.data_collector.class">Symfony\Bundle\DoctrineBundle\DataCollector\DoctrineDataCollector</parameter>
|
||||
<parameter key="doctrine.dbal.default_connection">default</parameter>
|
||||
</parameters>
|
||||
|
@ -5,10 +5,39 @@
|
||||
xsi:schemaLocation="http://www.symfony-project.org/schema/dic/services http://www.symfony-project.org/schema/dic/services/services-1.0.xsd">
|
||||
|
||||
<parameters>
|
||||
<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>
|
||||
<parameter key="doctrine.orm.metadata_cache_driver">array</parameter>
|
||||
<parameter key="doctrine.orm.query_cache_driver">array</parameter>
|
||||
<parameter key="doctrine.orm.result_cache_driver">array</parameter>
|
||||
<parameter key="doctrine.orm.configuration_class">Doctrine\ORM\Configuration</parameter>
|
||||
<parameter key="doctrine.orm.entity_manager_class">Doctrine\ORM\EntityManager</parameter>
|
||||
|
||||
<!-- proxies -->
|
||||
<parameter key="doctrine.orm.proxy_namespace">Proxies</parameter>
|
||||
<parameter key="doctrine.orm.auto_generate_proxy_classes">false</parameter>
|
||||
|
||||
<!-- cache -->
|
||||
<parameter key="doctrine.orm.cache.array_class">Doctrine\Common\Cache\ArrayCache</parameter>
|
||||
<parameter key="doctrine.orm.cache.apc_class">Doctrine\Common\Cache\ApcCache</parameter>
|
||||
<parameter key="doctrine.orm.cache.memcache_class">Doctrine\Common\Cache\MemcacheCache</parameter>
|
||||
<parameter key="doctrine.orm.cache.memcache_host">localhost</parameter>
|
||||
<parameter key="doctrine.orm.cache.memcache_port">11211</parameter>
|
||||
<parameter key="doctrine.orm.cache.memcache_instance_class">Memcache</parameter>
|
||||
<parameter key="doctrine.orm.cache.xcache_class">Doctrine\Common\Cache\XcacheCache</parameter>
|
||||
|
||||
<!-- metadata -->
|
||||
<parameter key="doctrine.orm.metadata.driver_chain_class">Doctrine\ORM\Mapping\Driver\DriverChain</parameter>
|
||||
<parameter key="doctrine.orm.metadata.annotation_class">Doctrine\ORM\Mapping\Driver\AnnotationDriver</parameter>
|
||||
<parameter key="doctrine.orm.metadata.annotation_reader_class">Doctrine\Common\Annotations\AnnotationReader</parameter>
|
||||
<parameter key="doctrine.orm.metadata.annotation_default_namespace">Doctrine\ORM\Mapping\</parameter>
|
||||
<parameter key="doctrine.orm.metadata.xml_class">Doctrine\ORM\Mapping\Driver\XmlDriver</parameter>
|
||||
<parameter key="doctrine.orm.metadata.yml_class">Doctrine\ORM\Mapping\Driver\YamlDriver</parameter>
|
||||
|
||||
<!-- directories -->
|
||||
<parameter key="doctrine.orm.mapping_dirs" type="collection"></parameter>
|
||||
<parameter key="doctrine.orm.xml_mapping_dirs">%doctrine.orm.mapping_dirs%</parameter>
|
||||
<parameter key="doctrine.orm.yml_mapping_dirs">%doctrine.orm.mapping_dirs%</parameter>
|
||||
<parameter key="doctrine.orm.entity_dirs" type="collection"></parameter>
|
||||
</parameters>
|
||||
|
||||
<services>
|
||||
|
@ -0,0 +1,412 @@
|
||||
<?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\Bundle\DoctrineBundle\Tests\DependencyInjection;
|
||||
|
||||
use Symfony\Bundle\DoctrineBundle\Tests\TestCase;
|
||||
use Symfony\Bundle\DoctrineBundle\DependencyInjection\DoctrineExtension;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Components\DependencyInjection\Loader\YamlFileLoader;
|
||||
|
||||
abstract class AbstractDoctrineExtensionTest extends TestCase
|
||||
{
|
||||
abstract protected function loadFromFile(ContainerBuilder $container, $file);
|
||||
|
||||
public function testDbalLoad()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader();
|
||||
|
||||
$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');
|
||||
|
||||
// doctrine.dbal.default_connection
|
||||
$this->assertEquals('default', $container->getParameter('doctrine.dbal.default_connection'), '->dbalLoad() overrides existing configuration options');
|
||||
$loader->dbalLoad(array('default_connection' => 'foo'), $container);
|
||||
$this->assertEquals('foo', $container->getParameter('doctrine.dbal.default_connection'), '->dbalLoad() overrides existing configuration options');
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$this->assertEquals('foo', $container->getParameter('doctrine.dbal.default_connection'), '->dbalLoad() overrides existing configuration options');
|
||||
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader();
|
||||
$loader->dbalLoad(array('password' => 'foo'), $container);
|
||||
|
||||
$arguments = $container->getDefinition('doctrine.dbal.default_connection')->getArguments();
|
||||
$config = $arguments[0];
|
||||
|
||||
$this->assertEquals('foo', $config['password']);
|
||||
$this->assertEquals('root', $config['user']);
|
||||
|
||||
$loader->dbalLoad(array('user' => 'foo'), $container);
|
||||
$this->assertEquals('foo', $config['password']);
|
||||
$this->assertEquals('root', $config['user']);
|
||||
}
|
||||
|
||||
public function testDbalLoadFromXmlMultipleConnections()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader();
|
||||
$container->registerExtension($loader);
|
||||
|
||||
$loadXml = new XmlFileLoader($container, __DIR__.'/Fixtures/config/xml');
|
||||
$loadXml->load('dbal_service_multiple_connections.xml');
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$container->freeze();
|
||||
|
||||
// doctrine.dbal.mysql_connection
|
||||
$arguments = $container->getDefinition('doctrine.dbal.mysql_connection')->getArguments();
|
||||
$config = $arguments[0];
|
||||
|
||||
$this->assertEquals('mysql_s3cr3t', $config['password']);
|
||||
$this->assertEquals('mysql_user', $config['user']);
|
||||
$this->assertEquals('mysql_db', $config['dbname']);
|
||||
$this->assertEquals('/path/to/mysqld.sock', $config['unix_socket']);
|
||||
|
||||
// doctrine.dbal.sqlite_connection
|
||||
$arguments = $container->getDefinition('doctrine.dbal.sqlite_connection')->getArguments();
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader();
|
||||
$container->registerExtension($loader);
|
||||
|
||||
$loadXml = new XmlFileLoader($container, __DIR__.'/Fixtures/config/xml');
|
||||
$loadXml->load('dbal_service_single_connection.xml');
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$container->freeze();
|
||||
|
||||
// doctrine.dbal.mysql_connection
|
||||
$arguments = $container->getDefinition('doctrine.dbal.mysql_connection')->getArguments();
|
||||
$config = $arguments[0];
|
||||
|
||||
$this->assertEquals('mysql_s3cr3t', $config['password']);
|
||||
$this->assertEquals('mysql_user', $config['user']);
|
||||
$this->assertEquals('mysql_db', $config['dbname']);
|
||||
$this->assertEquals('/path/to/mysqld.sock', $config['unix_socket']);
|
||||
}
|
||||
|
||||
public function testDependencyInjectionConfigurationDefaults()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader();
|
||||
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$loader->ormLoad(array(), $container);
|
||||
|
||||
$this->assertEquals('Doctrine\DBAL\Connection', $container->getParameter('doctrine.dbal.connection_class'));
|
||||
$this->assertEquals('Doctrine\ORM\Configuration', $container->getParameter('doctrine.orm.configuration_class'));
|
||||
$this->assertEquals('Doctrine\ORM\EntityManager', $container->getParameter('doctrine.orm.entity_manager_class'));
|
||||
$this->assertEquals('Proxies', $container->getParameter('doctrine.orm.proxy_namespace'));
|
||||
$this->assertEquals(false, $container->getParameter('doctrine.orm.auto_generate_proxy_classes'));
|
||||
$this->assertEquals('Doctrine\Common\Cache\ArrayCache', $container->getParameter('doctrine.orm.cache.array_class'));
|
||||
$this->assertEquals('Doctrine\Common\Cache\ApcCache', $container->getParameter('doctrine.orm.cache.apc_class'));
|
||||
$this->assertEquals('Doctrine\Common\Cache\MemcacheCache', $container->getParameter('doctrine.orm.cache.memcache_class'));
|
||||
$this->assertEquals('localhost', $container->getParameter('doctrine.orm.cache.memcache_host'));
|
||||
$this->assertEquals('11211', $container->getParameter('doctrine.orm.cache.memcache_port'));
|
||||
$this->assertEquals('Memcache', $container->getParameter('doctrine.orm.cache.memcache_instance_class'));
|
||||
$this->assertEquals('Doctrine\Common\Cache\XcacheCache', $container->getParameter('doctrine.orm.cache.xcache_class'));
|
||||
$this->assertEquals('Doctrine\ORM\Mapping\Driver\DriverChain', $container->getParameter('doctrine.orm.metadata.driver_chain_class'));
|
||||
$this->assertEquals('Doctrine\ORM\Mapping\Driver\AnnotationDriver', $container->getParameter('doctrine.orm.metadata.annotation_class'));
|
||||
$this->assertEquals('Doctrine\Common\Annotations\AnnotationReader', $container->getParameter('doctrine.orm.metadata.annotation_reader_class'));
|
||||
$this->assertEquals('Doctrine\ORM\Mapping\\', $container->getParameter('doctrine.orm.metadata.annotation_default_namespace'));
|
||||
$this->assertEquals('Doctrine\ORM\Mapping\Driver\XmlDriver', $container->getParameter('doctrine.orm.metadata.xml_class'));
|
||||
$this->assertEquals('Doctrine\ORM\Mapping\Driver\YamlDriver', $container->getParameter('doctrine.orm.metadata.yml_class'));
|
||||
|
||||
$config = array(
|
||||
'proxy_namespace' => 'MyProxies',
|
||||
'auto_generate_proxy_classes' => true,
|
||||
);
|
||||
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$loader->ormLoad($config, $container);
|
||||
|
||||
$this->assertEquals('MyProxies', $container->getParameter('doctrine.orm.proxy_namespace'));
|
||||
$this->assertEquals(true, $container->getParameter('doctrine.orm.auto_generate_proxy_classes'));
|
||||
|
||||
$definition = $container->getDefinition('doctrine.dbal.default_connection');
|
||||
$this->assertEquals('Doctrine\DBAL\DriverManager', $definition->getClass());
|
||||
|
||||
$args = $definition->getArguments();
|
||||
$this->assertEquals('Doctrine\DBAL\Driver\PDOMySql\Driver', $args[0]['driverClass']);
|
||||
$this->assertEquals('localhost', $args[0]['host']);
|
||||
$this->assertEquals('root', $args[0]['user']);
|
||||
$this->assertEquals('doctrine.dbal.default_connection.configuration', (string) $args[1]);
|
||||
$this->assertEquals('doctrine.dbal.default_connection.event_manager', (string) $args[2]);
|
||||
|
||||
$definition = $container->getDefinition('doctrine.orm.default_entity_manager');
|
||||
$this->assertEquals('%doctrine.orm.entity_manager_class%', $definition->getClass());
|
||||
$this->assertEquals('create', $definition->getFactoryMethod());
|
||||
|
||||
$arguments = $definition->getArguments();
|
||||
$this->assertInstanceOf('Symfony\Components\DependencyInjection\Reference', $arguments[0]);
|
||||
$this->assertEquals('doctrine.dbal.default_connection', (string) $arguments[0]);
|
||||
$this->assertInstanceOf('Symfony\Components\DependencyInjection\Reference', $arguments[1]);
|
||||
$this->assertEquals('doctrine.orm.default_configuration', (string) $arguments[1]);
|
||||
}
|
||||
|
||||
public function testSingleEntityManagerConfiguration()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader();
|
||||
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$loader->ormLoad(array(), $container);
|
||||
|
||||
$definition = $container->getDefinition('doctrine.dbal.default_connection');
|
||||
$this->assertEquals('Doctrine\DBAL\DriverManager', $definition->getClass());
|
||||
|
||||
$definition = $container->getDefinition('doctrine.orm.default_entity_manager');
|
||||
$this->assertEquals('%doctrine.orm.entity_manager_class%', $definition->getClass());
|
||||
$this->assertEquals('create', $definition->getFactoryMethod());
|
||||
|
||||
$arguments = $definition->getArguments();
|
||||
$this->assertInstanceOf('Symfony\Components\DependencyInjection\Reference', $arguments[0]);
|
||||
$this->assertEquals('doctrine.dbal.default_connection', (string) $arguments[0]);
|
||||
$this->assertInstanceOf('Symfony\Components\DependencyInjection\Reference', $arguments[1]);
|
||||
$this->assertEquals('doctrine.orm.default_configuration', (string) $arguments[1]);
|
||||
}
|
||||
|
||||
public function testLoadSimpleSingleConnection()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader();
|
||||
$container->registerExtension($loader);
|
||||
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$loader->ormLoad(array(), $container);
|
||||
|
||||
$this->loadFromFile($container, 'orm_service_simple_single_entity_manager');
|
||||
|
||||
$container->freeze();
|
||||
|
||||
$definition = $container->getDefinition('doctrine.dbal.default_connection');
|
||||
$this->assertEquals('Doctrine\DBAL\DriverManager', $definition->getClass());
|
||||
|
||||
$arguments = $definition->getArguments();
|
||||
$this->assertEquals('Doctrine\DBAL\Driver\PDOMySql\Driver', $arguments[0]['driverClass']);
|
||||
$this->assertEquals('localhost', $arguments[0]['host']);
|
||||
$this->assertEquals('root', $arguments[0]['user']);
|
||||
$this->assertEquals('doctrine.dbal.default_connection.configuration', (string) $arguments[1]);
|
||||
$this->assertEquals('doctrine.dbal.default_connection.event_manager', (string) $arguments[2]);
|
||||
|
||||
$definition = $container->getDefinition('doctrine.orm.default_entity_manager');
|
||||
$this->assertEquals('%doctrine.orm.entity_manager_class%', $definition->getClass());
|
||||
$this->assertEquals('create', $definition->getFactoryMethod());
|
||||
|
||||
$arguments = $definition->getArguments();
|
||||
$this->assertInstanceOf('Symfony\Components\DependencyInjection\Reference', $arguments[0]);
|
||||
$this->assertEquals('doctrine.dbal.default_connection', (string) $arguments[0]);
|
||||
$this->assertInstanceOf('Symfony\Components\DependencyInjection\Reference', $arguments[1]);
|
||||
$this->assertEquals('doctrine.orm.default_configuration', (string) $arguments[1]);
|
||||
}
|
||||
|
||||
public function testLoadSingleConnection()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader();
|
||||
$container->registerExtension($loader);
|
||||
|
||||
$this->loadFromFile($container, 'orm_service_single_entity_manager');
|
||||
|
||||
$container->freeze();
|
||||
|
||||
$definition = $container->getDefinition('doctrine.dbal.default_connection');
|
||||
$this->assertEquals('Doctrine\DBAL\DriverManager', $definition->getClass());
|
||||
|
||||
$args = $definition->getArguments();
|
||||
$this->assertEquals('Doctrine\DBAL\Driver\PDOSqlite\Driver', $args[0]['driverClass']);
|
||||
$this->assertEquals('localhost', $args[0]['host']);
|
||||
$this->assertEquals('sqlite_user', $args[0]['user']);
|
||||
$this->assertEquals('doctrine.dbal.default_connection.configuration', (string) $args[1]);
|
||||
$this->assertEquals('doctrine.dbal.default_connection.event_manager', (string) $args[2]);
|
||||
|
||||
$definition = $container->getDefinition('doctrine.orm.default_entity_manager');
|
||||
$this->assertEquals('%doctrine.orm.entity_manager_class%', $definition->getClass());
|
||||
$this->assertEquals('create', $definition->getFactoryMethod());
|
||||
|
||||
$arguments = $definition->getArguments();
|
||||
$this->assertInstanceOf('Symfony\Components\DependencyInjection\Reference', $arguments[0]);
|
||||
$this->assertEquals('doctrine.dbal.default_connection', (string) $arguments[0]);
|
||||
$this->assertInstanceOf('Symfony\Components\DependencyInjection\Reference', $arguments[1]);
|
||||
$this->assertEquals('doctrine.orm.default_configuration', (string) $arguments[1]);
|
||||
}
|
||||
|
||||
public function testLoadMultipleConnections()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader();
|
||||
$container->registerExtension($loader);
|
||||
|
||||
$this->loadFromFile($container, 'orm_service_multiple_entity_managers');
|
||||
|
||||
$container->freeze();
|
||||
|
||||
$definition = $container->getDefinition('doctrine.dbal.conn1_connection');
|
||||
$this->assertEquals('Doctrine\DBAL\DriverManager', $definition->getClass());
|
||||
|
||||
$args = $definition->getArguments();
|
||||
$this->assertEquals('Doctrine\DBAL\Driver\PDOSqlite\Driver', $args[0]['driverClass']);
|
||||
$this->assertEquals('localhost', $args[0]['host']);
|
||||
$this->assertEquals('sqlite_user', $args[0]['user']);
|
||||
$this->assertEquals('doctrine.dbal.conn1_connection.configuration', (string) $args[1]);
|
||||
$this->assertEquals('doctrine.dbal.conn1_connection.event_manager', (string) $args[2]);
|
||||
|
||||
$this->assertEquals('doctrine.orm.dm2_entity_manager', $container->getAlias('doctrine.orm.entity_manager'));
|
||||
|
||||
$definition = $container->getDefinition('doctrine.orm.dm1_entity_manager');
|
||||
$this->assertEquals('%doctrine.orm.entity_manager_class%', $definition->getClass());
|
||||
$this->assertEquals('create', $definition->getFactoryMethod());
|
||||
|
||||
$arguments = $definition->getArguments();
|
||||
$this->assertInstanceOf('Symfony\Components\DependencyInjection\Reference', $arguments[0]);
|
||||
$this->assertEquals('doctrine.dbal.conn1_connection', (string) $arguments[0]);
|
||||
$this->assertInstanceOf('Symfony\Components\DependencyInjection\Reference', $arguments[1]);
|
||||
$this->assertEquals('doctrine.orm.dm1_configuration', (string) $arguments[1]);
|
||||
|
||||
$definition = $container->getDefinition('doctrine.dbal.conn2_connection');
|
||||
$this->assertEquals('Doctrine\DBAL\DriverManager', $definition->getClass());
|
||||
|
||||
$args = $definition->getArguments();
|
||||
$this->assertEquals('Doctrine\DBAL\Driver\PDOSqlite\Driver', $args[0]['driverClass']);
|
||||
$this->assertEquals('localhost', $args[0]['host']);
|
||||
$this->assertEquals('sqlite_user', $args[0]['user']);
|
||||
$this->assertEquals('doctrine.dbal.conn2_connection.configuration', (string) $args[1]);
|
||||
$this->assertEquals('doctrine.dbal.conn2_connection.event_manager', (string) $args[2]);
|
||||
|
||||
$definition = $container->getDefinition('doctrine.orm.dm2_entity_manager');
|
||||
$this->assertEquals('%doctrine.orm.entity_manager_class%', $definition->getClass());
|
||||
$this->assertEquals('create', $definition->getFactoryMethod());
|
||||
|
||||
$arguments = $definition->getArguments();
|
||||
$this->assertInstanceOf('Symfony\Components\DependencyInjection\Reference', $arguments[0]);
|
||||
$this->assertEquals('doctrine.dbal.conn2_connection', (string) $arguments[0]);
|
||||
$this->assertInstanceOf('Symfony\Components\DependencyInjection\Reference', $arguments[1]);
|
||||
$this->assertEquals('doctrine.orm.dm2_configuration', (string) $arguments[1]);
|
||||
}
|
||||
|
||||
public function testBundleEntityAliases()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader();
|
||||
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$loader->ormLoad(array(), $container);
|
||||
|
||||
$definition = $container->getDefinition('doctrine.orm.default_configuration');
|
||||
$calls = $definition->getMethodCalls();
|
||||
$this->assertTrue(isset($calls[0][1][0]['YamlBundle']));
|
||||
$this->assertEquals('Fixtures\Bundles\YamlBundle\Entity', $calls[0][1][0]['YamlBundle']);
|
||||
}
|
||||
|
||||
public function testYamlBundleMappingDetection()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader('YamlBundle');
|
||||
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$loader->ormLoad(array(), $container);
|
||||
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/Bundles/YamlBundle/Resources/config/doctrine/metadata'), $container->getParameter('doctrine.orm.mapping_dirs'));
|
||||
$this->assertEquals('%doctrine.orm.mapping_dirs%', $container->getParameter('doctrine.orm.xml_mapping_dirs'));
|
||||
$this->assertEquals('%doctrine.orm.mapping_dirs%', $container->getParameter('doctrine.orm.yml_mapping_dirs'));
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/Bundles/YamlBundle/Entity'), $container->getParameter('doctrine.orm.entity_dirs'));
|
||||
|
||||
$calls = $container->getDefinition('doctrine.orm.metadata_driver')->getMethodCalls();
|
||||
$this->assertEquals('doctrine.orm.metadata_driver.yml', (string) $calls[0][1][0]);
|
||||
$this->assertEquals('Fixtures\Bundles\YamlBundle\Entity', $calls[0][1][1]);
|
||||
}
|
||||
|
||||
public function testXmlBundleMappingDetection()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader('XmlBundle');
|
||||
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$loader->ormLoad(array(), $container);
|
||||
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/Bundles/XmlBundle/Resources/config/doctrine/metadata'), $container->getParameter('doctrine.orm.mapping_dirs'));
|
||||
$this->assertEquals('%doctrine.orm.mapping_dirs%', $container->getParameter('doctrine.orm.xml_mapping_dirs'));
|
||||
$this->assertEquals('%doctrine.orm.mapping_dirs%', $container->getParameter('doctrine.orm.yml_mapping_dirs'));
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/Bundles/XmlBundle/Entity'), $container->getParameter('doctrine.orm.entity_dirs'));
|
||||
|
||||
$calls = $container->getDefinition('doctrine.orm.metadata_driver')->getMethodCalls();
|
||||
$this->assertEquals('doctrine.orm.metadata_driver.xml', (string) $calls[0][1][0]);
|
||||
$this->assertEquals('Fixtures\Bundles\XmlBundle\Entity', $calls[0][1][1]);
|
||||
}
|
||||
|
||||
public function testAnnotationsBundleMappingDetection()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader('AnnotationsBundle');
|
||||
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$loader->ormLoad(array(), $container);
|
||||
|
||||
$this->assertEquals(array(), $container->getParameter('doctrine.orm.mapping_dirs'));
|
||||
$this->assertEquals('%doctrine.orm.mapping_dirs%', $container->getParameter('doctrine.orm.xml_mapping_dirs'));
|
||||
$this->assertEquals('%doctrine.orm.mapping_dirs%', $container->getParameter('doctrine.orm.yml_mapping_dirs'));
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/Bundles/AnnotationsBundle/Entity'), $container->getParameter('doctrine.orm.entity_dirs'));
|
||||
|
||||
$calls = $container->getDefinition('doctrine.orm.metadata_driver')->getMethodCalls();
|
||||
$this->assertEquals('doctrine.orm.metadata_driver.annotation', (string) $calls[0][1][0]);
|
||||
$this->assertEquals('Fixtures\Bundles\AnnotationsBundle\Entity', $calls[0][1][1]);
|
||||
}
|
||||
|
||||
public function testEntityManagerMetadataCacheDriverConfiguration()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader();
|
||||
$container->registerExtension($loader);
|
||||
|
||||
$this->loadFromFile($container, 'orm_service_multiple_entity_managers');
|
||||
|
||||
$container->freeze();
|
||||
|
||||
$definition = $container->getDefinition('doctrine.orm.dm1_metadata_cache');
|
||||
$this->assertEquals('%doctrine.orm.cache.xcache_class%', $definition->getClass());
|
||||
|
||||
$definition = $container->getDefinition('doctrine.orm.dm2_metadata_cache');
|
||||
$this->assertEquals('%doctrine.orm.cache.apc_class%', $definition->getClass());
|
||||
}
|
||||
|
||||
public function testEntityManagerMemcacheMetadataCacheDriverConfiguration()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = $this->getDoctrineExtensionLoader();
|
||||
$container->registerExtension($loader);
|
||||
|
||||
$this->loadFromFile($container, 'orm_service_simple_single_entity_manager');
|
||||
|
||||
$container->freeze();
|
||||
|
||||
$definition = $container->getDefinition('doctrine.orm.default_metadata_cache');
|
||||
$this->assertEquals('Doctrine\Common\Cache\MemcacheCache', $definition->getClass());
|
||||
|
||||
$calls = $definition->getMethodCalls();
|
||||
$this->assertEquals('setMemcache', $calls[0][0]);
|
||||
$this->assertEquals('doctrine.orm.default_memcache_instance', (string) $calls[0][1][0]);
|
||||
|
||||
$definition = $container->getDefinition('doctrine.orm.default_memcache_instance');
|
||||
$this->assertEquals('Memcache', $definition->getClass());
|
||||
|
||||
$calls = $definition->getMethodCalls();
|
||||
$this->assertEquals('connect', $calls[0][0]);
|
||||
$this->assertEquals('localhost', $calls[0][1][0]);
|
||||
$this->assertEquals(11211, $calls[0][1][1]);
|
||||
}
|
||||
|
||||
protected function getDoctrineExtensionLoader($bundle = 'YamlBundle')
|
||||
{
|
||||
require_once __DIR__.'/Fixtures/Bundles/'.$bundle.'/'.$bundle.'.php';
|
||||
$bundleDirs = array('Fixtures\\Bundles' => __DIR__.'/Fixtures/Bundles');
|
||||
$bundles = array('Fixtures\\Bundles\\'.$bundle.'\\'.$bundle);
|
||||
return new DoctrineExtension($bundleDirs, $bundles, sys_get_temp_dir());
|
||||
}
|
||||
}
|
@ -1,111 +0,0 @@
|
||||
<?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\Bundle\DoctrineBundle\Tests\DependencyInjection;
|
||||
|
||||
use Symfony\Bundle\DoctrineBundle\Tests\TestCase;
|
||||
use Symfony\Bundle\DoctrineBundle\DependencyInjection\DoctrineExtension;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
|
||||
class DoctrineExtensionTest extends TestCase
|
||||
{
|
||||
public function testDbalLoad()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new DoctrineExtension(array(), array(), sys_get_temp_dir());
|
||||
|
||||
$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');
|
||||
|
||||
// doctrine.dbal.default_connection
|
||||
$this->assertEquals('default', $container->getParameter('doctrine.dbal.default_connection'), '->dbalLoad() overrides existing configuration options');
|
||||
$loader->dbalLoad(array('default_connection' => 'foo'), $container);
|
||||
$this->assertEquals('foo', $container->getParameter('doctrine.dbal.default_connection'), '->dbalLoad() overrides existing configuration options');
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$this->assertEquals('foo', $container->getParameter('doctrine.dbal.default_connection'), '->dbalLoad() overrides existing configuration options');
|
||||
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new DoctrineExtension(array(), array(), sys_get_temp_dir());
|
||||
$loader->dbalLoad(array('password' => 'foo'), $container);
|
||||
|
||||
$arguments = $container->getDefinition('doctrine.dbal.default_connection')->getArguments();
|
||||
$config = $arguments[0];
|
||||
|
||||
$this->assertEquals('foo', $config['password']);
|
||||
$this->assertEquals('root', $config['user']);
|
||||
|
||||
$loader->dbalLoad(array('user' => 'foo'), $container);
|
||||
$this->assertEquals('foo', $config['password']);
|
||||
$this->assertEquals('root', $config['user']);
|
||||
}
|
||||
|
||||
public function testDbalLoadFromXmlMultipleConnections()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new DoctrineExtension(array(), array(), sys_get_temp_dir());
|
||||
$container->registerExtension($loader);
|
||||
|
||||
$loadXml = new XmlFileLoader($container, __DIR__.'/Fixtures/xml');
|
||||
$loadXml->load('dbal_service_multiple_connections.xml');
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$container->freeze();
|
||||
|
||||
// doctrine.dbal.mysql_connection
|
||||
$arguments = $container->getDefinition('doctrine.dbal.mysql_connection')->getArguments();
|
||||
$config = $arguments[0];
|
||||
|
||||
$this->assertEquals('mysql_s3cr3t', $config['password']);
|
||||
$this->assertEquals('mysql_user', $config['user']);
|
||||
$this->assertEquals('mysql_db', $config['dbname']);
|
||||
$this->assertEquals('/path/to/mysqld.sock', $config['unix_socket']);
|
||||
|
||||
// doctrine.dbal.sqlite_connection
|
||||
$arguments = $container->getDefinition('doctrine.dbal.sqlite_connection')->getArguments();
|
||||
$config = $arguments[0];
|
||||
|
||||
$this->assertEquals('sqlite_s3cr3t', $config['password']);
|
||||
$this->assertEquals('sqlite_user', $config['user']);
|
||||
$this->assertEquals('sqlite_db', $config['dbname']);
|
||||
$this->assertEquals(true, $config['memory']);
|
||||
|
||||
// doctrine.dbal.oci_connection
|
||||
$arguments = $container->getDefinition('doctrine.dbal.oci_connection')->getArguments();
|
||||
$config = $arguments[0];
|
||||
|
||||
$this->assertEquals('oracle_s3cr3t', $config['password']);
|
||||
$this->assertEquals('oracle_user', $config['user']);
|
||||
$this->assertEquals('oracle_db', $config['dbname']);
|
||||
$this->assertEquals('utf8', $config['charset']);
|
||||
}
|
||||
|
||||
|
||||
public function testDbalLoadFromXmlSingleConnection()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new DoctrineExtension(array(), array(), sys_get_temp_dir());
|
||||
$container->registerExtension($loader);
|
||||
|
||||
$loadXml = new XmlFileLoader($container, __DIR__.'/Fixtures/xml');
|
||||
$loadXml->load('dbal_service_single_connection.xml');
|
||||
$loader->dbalLoad(array(), $container);
|
||||
$container->freeze();
|
||||
|
||||
// doctrine.dbal.mysql_connection
|
||||
$arguments = $container->getDefinition('doctrine.dbal.mysql_connection')->getArguments();
|
||||
$config = $arguments[0];
|
||||
|
||||
$this->assertEquals('mysql_s3cr3t', $config['password']);
|
||||
$this->assertEquals('mysql_user', $config['user']);
|
||||
$this->assertEquals('mysql_db', $config['dbname']);
|
||||
$this->assertEquals('/path/to/mysqld.sock', $config['unix_socket']);
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\AnnotationsBundle;
|
||||
namespace Fixtures\Bundles\AnnotationsBundle;
|
||||
|
||||
use Symfony\Framework\Bundle\Bundle;
|
||||
|
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\Bundles\AnnotationsBundle\Entity;
|
||||
|
||||
class Test
|
||||
{
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\Bundles\XmlBundle\Entity;
|
||||
|
||||
class Test
|
||||
{
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\XmlBundle;
|
||||
namespace Fixtures\Bundles\XmlBundle;
|
||||
|
||||
use Symfony\Framework\Bundle\Bundle;
|
||||
|
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\Bundles\YamlBundle\Entity;
|
||||
|
||||
class Test
|
||||
{
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\YamlBundle;
|
||||
namespace Fixtures\Bundles\YamlBundle;
|
||||
|
||||
use Symfony\Framework\Bundle\Bundle;
|
||||
|
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" ?>
|
||||
|
||||
<container xmlns="http://www.symfony-project.org/schema/dic/services"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:doctrine="http://www.symfony-project.org/schema/dic/doctrine"
|
||||
xsi:schemaLocation="http://www.symfony-project.org/schema/dic/services http://www.symfony-project.org/schema/dic/services/services-1.0.xsd
|
||||
http://www.symfony-project.org/schema/dic/doctrine/orm http://www.symfony-project.org/schema/dic/doctrine/orm/doctrine-1.0.xsd
|
||||
http://www.symfony-project.org/schema/dic/doctrine/dbal http://www.symfony-project.org/schema/dic/doctrine/dbal/doctrine-1.0.xsd">
|
||||
|
||||
<doctrine:dbal>
|
||||
<doctrine:connections>
|
||||
<doctrine:connection
|
||||
id="conn1"
|
||||
driver="PDOSqlite"
|
||||
dbname="sqlite_db"
|
||||
user="sqlite_user"
|
||||
password="sqlite_s3cr3t"
|
||||
memory="true" />
|
||||
<doctrine:connection
|
||||
id="conn2"
|
||||
driver="PDOSqlite"
|
||||
dbname="sqlite_db"
|
||||
user="sqlite_user"
|
||||
password="sqlite_s3cr3t"
|
||||
memory="true" />
|
||||
</doctrine:connections>
|
||||
</doctrine:dbal>
|
||||
|
||||
<doctrine:orm
|
||||
metadata_cache_driver="apc"
|
||||
default_entity_manager="dm2"
|
||||
default_connection="conn1"
|
||||
proxy_namespace="Proxies"
|
||||
auto_generate_proxy_classes="true"
|
||||
>
|
||||
<doctrine:entity_managers>
|
||||
<doctrine:entity_manager id="dm1" metadata_cache_driver="xcache" connection="conn1" />
|
||||
<doctrine:entity_manager id="dm2" connection="conn2" />
|
||||
</doctrine:entity_managers>
|
||||
</doctrine:orm>
|
||||
</container>
|
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" ?>
|
||||
|
||||
<container xmlns="http://www.symfony-project.org/schema/dic/services"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:doctrine="http://www.symfony-project.org/schema/dic/doctrine"
|
||||
xsi:schemaLocation="http://www.symfony-project.org/schema/dic/services http://www.symfony-project.org/schema/dic/services/services-1.0.xsd
|
||||
http://www.symfony-project.org/schema/dic/doctrine/orm http://www.symfony-project.org/schema/dic/doctrine/orm/doctrine-1.0.xsd
|
||||
http://www.symfony-project.org/schema/dic/doctrine/dbal http://www.symfony-project.org/schema/dic/doctrine/dbal/doctrine-1.0.xsd">
|
||||
|
||||
<doctrine:dbal />
|
||||
<doctrine:orm>
|
||||
<metadata_cache_driver type="memcache">
|
||||
<class>Doctrine\Common\Cache\MemcacheCache</class>
|
||||
<host>localhost</host>
|
||||
<port>11211</port>
|
||||
<instance_class>Memcache</instance_class>
|
||||
</metadata_cache_driver>
|
||||
</doctrine:orm>
|
||||
</container>
|
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" ?>
|
||||
|
||||
<container xmlns="http://www.symfony-project.org/schema/dic/services"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:doctrine="http://www.symfony-project.org/schema/dic/doctrine"
|
||||
xsi:schemaLocation="http://www.symfony-project.org/schema/dic/services http://www.symfony-project.org/schema/dic/services/services-1.0.xsd
|
||||
http://www.symfony-project.org/schema/dic/doctrine/orm http://www.symfony-project.org/schema/dic/doctrine/orm/doctrine-1.0.xsd
|
||||
http://www.symfony-project.org/schema/dic/doctrine/dbal http://www.symfony-project.org/schema/dic/doctrine/dbal/doctrine-1.0.xsd">
|
||||
|
||||
<doctrine:dbal>
|
||||
<doctrine:connections>
|
||||
<doctrine:connection
|
||||
id="default"
|
||||
driver="PDOSqlite"
|
||||
dbname="sqlite_db"
|
||||
user="sqlite_user"
|
||||
password="sqlite_s3cr3t"
|
||||
memory="true" />
|
||||
</doctrine:connections>
|
||||
</doctrine:dbal>
|
||||
|
||||
<doctrine:orm
|
||||
metadata_cache_driver="apc"
|
||||
default_entity_manager="dm2"
|
||||
default_connection="conn1"
|
||||
proxy_namespace="Proxies"
|
||||
auto_generate_proxy_classes="true"
|
||||
>
|
||||
<doctrine:entity_managers>
|
||||
<doctrine:entity_manager id="default" connection="default">
|
||||
<metadata_cache_driver type="memcache">
|
||||
<class>Doctrine\Common\Cache\MemcacheCache</class>
|
||||
<host>localhost</host>
|
||||
<port>11211</port>
|
||||
<instance_class>Memcache</instance_class>
|
||||
</metadata_cache_driver>
|
||||
</doctrine:entity_manager>
|
||||
</doctrine:entity_managers>
|
||||
</doctrine:orm>
|
||||
</container>
|
@ -0,0 +1,19 @@
|
||||
doctrine.dbal:
|
||||
connections:
|
||||
mysql:
|
||||
dbname: mysql_db
|
||||
user: mysql_user
|
||||
password: mysql_s3cr3t
|
||||
unix_socket: /path/to/mysqld.sock
|
||||
sqlite:
|
||||
driver: PDOSqlite
|
||||
dbname: sqlite_db
|
||||
user: sqlite_user
|
||||
password: sqlite_s3cr3t
|
||||
memory: true
|
||||
oci:
|
||||
driver: OCI8
|
||||
dbname: oracle_db
|
||||
user: oracle_user
|
||||
password: oracle_s3cr3t
|
||||
charset: utf8
|
@ -0,0 +1,7 @@
|
||||
doctrine.dbal:
|
||||
connections:
|
||||
mysql:
|
||||
dbname: mysql_db
|
||||
user: mysql_user
|
||||
password: mysql_s3cr3t
|
||||
unix_socket: /path/to/mysqld.sock
|
@ -0,0 +1,27 @@
|
||||
doctrine.dbal:
|
||||
connections:
|
||||
conn1:
|
||||
driver: PDOSqlite
|
||||
dbname: sqlite_db
|
||||
user: sqlite_user
|
||||
password: sqlite_s3cr3t
|
||||
memory: true
|
||||
conn2:
|
||||
driver: PDOSqlite
|
||||
dbname: sqlite_db
|
||||
user: sqlite_user
|
||||
password: sqlite_s3cr3t
|
||||
memory: true
|
||||
|
||||
doctrine.orm:
|
||||
metadata_cache_driver: apc
|
||||
default_entity_manager: dm2
|
||||
default_connection: conn1
|
||||
proxy_namespace: Proxies
|
||||
auto_generate_proxy_classes: true
|
||||
entity_managers:
|
||||
dm1:
|
||||
metadata_cache_driver: xcache
|
||||
connection: conn1
|
||||
dm2:
|
||||
connection: conn2
|
@ -0,0 +1,8 @@
|
||||
doctrine.dbal: ~
|
||||
doctrine.orm:
|
||||
metadata_cache_driver:
|
||||
type: memcache
|
||||
class: Doctrine\Common\Cache\MemcacheCache
|
||||
host: localhost
|
||||
port: 11211
|
||||
instance_class: Memcache
|
@ -0,0 +1,24 @@
|
||||
doctrine.dbal:
|
||||
connections:
|
||||
default:
|
||||
driver: PDOSqlite
|
||||
dbname: sqlite_db
|
||||
user: sqlite_user
|
||||
password: sqlite_s3cr3t
|
||||
memory: true
|
||||
|
||||
doctrine.orm:
|
||||
metadata_cache_driver: apc
|
||||
default_entity_manager: dm2
|
||||
default_connection: conn1
|
||||
proxy_namespace: Proxies
|
||||
auto_generate_proxy_classes: true
|
||||
entity_managers:
|
||||
default:
|
||||
connection: default
|
||||
metadata_cache_driver:
|
||||
type: memcache
|
||||
class: Doctrine\Common\Cache\MemcacheCache
|
||||
host: localhost
|
||||
port: 11211
|
||||
instance_class: Memcache
|
@ -0,0 +1,24 @@
|
||||
<?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\Bundle\DoctrineBundle\Tests\DependencyInjection;
|
||||
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
|
||||
class XmlDoctrineExtensionTest extends AbstractDoctrineExtensionTest
|
||||
{
|
||||
protected function loadFromFile(ContainerBuilder $container, $file)
|
||||
{
|
||||
$loadXml = new XmlFileLoader($container, __DIR__.'/Fixtures/config/xml');
|
||||
$loadXml->load($file.'.xml');
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
<?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\Bundle\DoctrineBundle\Tests\DependencyInjection;
|
||||
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Loader\YamlFileLoader;
|
||||
|
||||
class YamlDoctrineExtensionTest extends AbstractDoctrineExtensionTest
|
||||
{
|
||||
protected function loadFromFile(ContainerBuilder $container, $file)
|
||||
{
|
||||
$loadYaml = new YamlFileLoader($container, __DIR__.'/Fixtures/config/yml');
|
||||
$loadYaml->load($file.'.yml');
|
||||
}
|
||||
}
|
@ -15,15 +15,12 @@ use Symfony\Components\DependencyInjection\Resource\FileResource;
|
||||
* @author Bulat Shakirzyanov <bulat@theopenskyproject.com>
|
||||
* @author Kris Wallsmith <kris.wallsmith@symfony-project.com>
|
||||
* @author Jonathan H. Wage <jonwage@gmail.com>
|
||||
*
|
||||
* @todo Add support for multiple document managers
|
||||
*/
|
||||
class MongoDBExtension extends Extension
|
||||
{
|
||||
protected $resources = array(
|
||||
'mongodb' => 'mongodb.xml',
|
||||
);
|
||||
|
||||
protected $bundleDirs;
|
||||
protected $bundles;
|
||||
protected $kernelCacheDir;
|
||||
@ -36,10 +33,14 @@ class MongoDBExtension extends Extension
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the MongoDB configuration.
|
||||
* Loads the MongoDB ODM configuration.
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
|
||||
* Usage example:
|
||||
*
|
||||
* <doctrine:mongodb server="mongodb://localhost:27017" />
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
public function mongodbLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
@ -68,8 +69,8 @@ class MongoDBExtension extends Extension
|
||||
/**
|
||||
* Loads the default configuration.
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadDefaults(array $config, ContainerBuilder $container)
|
||||
{
|
||||
@ -79,6 +80,8 @@ class MongoDBExtension extends Extension
|
||||
|
||||
// Allow these application configuration options to override the defaults
|
||||
$options = array(
|
||||
'default_document_manager',
|
||||
'default_connection',
|
||||
'cache_driver',
|
||||
'metadata_cache_driver',
|
||||
'proxy_namespace',
|
||||
@ -96,8 +99,8 @@ class MongoDBExtension extends Extension
|
||||
/**
|
||||
* Loads the document managers configuration.
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadDocumentManagers(array $config, ContainerBuilder $container)
|
||||
{
|
||||
@ -117,7 +120,7 @@ class MongoDBExtension extends Extension
|
||||
* Loads a document manager configuration.
|
||||
*
|
||||
* @param array $documentManager A document manager configuration array
|
||||
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadDocumentManager(array $documentManager, ContainerBuilder $container)
|
||||
{
|
||||
@ -142,7 +145,7 @@ class MongoDBExtension extends Extension
|
||||
}
|
||||
|
||||
$odmDmArgs = array(
|
||||
new Reference(sprintf('doctrine.odm.mongodb.%s_connection', isset($documentManager['connection']) ? $documentManager['connection'] : 'default')),
|
||||
new Reference(sprintf('doctrine.odm.mongodb.%s_connection', isset($documentManager['connection']) ? $documentManager['connection'] : $documentManager['name'])),
|
||||
new Reference(sprintf('doctrine.odm.mongodb.%s_configuration', $documentManager['name']))
|
||||
);
|
||||
$odmDmDef = new Definition('%doctrine.odm.mongodb.document_manager_class%', $odmDmArgs);
|
||||
@ -160,14 +163,11 @@ class MongoDBExtension extends Extension
|
||||
/**
|
||||
* Gets the configured document managers.
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function getDocumentManagers(array $config, ContainerBuilder $container)
|
||||
{
|
||||
if (isset($config['default_document_manager'])) {
|
||||
$container->setParameter('doctrine.odm.mongodb.default_document_manager', $config['default_document_manager']);
|
||||
}
|
||||
$defaultDocumentManager = $container->getParameter('doctrine.odm.mongodb.default_document_manager');
|
||||
|
||||
$documentManagers = array();
|
||||
@ -190,8 +190,8 @@ class MongoDBExtension extends Extension
|
||||
/**
|
||||
* Loads a document managers bundles mapping information configuration.
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadDocumentManagerBundlesMappingInformation(array $documentManager, Definition $odmConfigDef, ContainerBuilder $container)
|
||||
{
|
||||
@ -200,7 +200,6 @@ class MongoDBExtension extends Extension
|
||||
$bundleDocumentMappings = array();
|
||||
$bundleDirs = $this->bundleDirs;
|
||||
$aliasMap = array();
|
||||
|
||||
foreach ($this->bundles as $className) {
|
||||
$tmp = dirname(str_replace('\\', '/', $className));
|
||||
$namespace = str_replace('/', '\\', dirname($tmp));
|
||||
@ -236,7 +235,7 @@ class MongoDBExtension extends Extension
|
||||
* Loads the configured document manager metadata cache driver.
|
||||
*
|
||||
* @param array $config A configured document manager array
|
||||
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadDocumentManagerMetadataCacheDriver(array $documentManager, ContainerBuilder $container)
|
||||
{
|
||||
@ -263,8 +262,8 @@ class MongoDBExtension extends Extension
|
||||
/**
|
||||
* Loads the configured connections.
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function loadConnections(array $config, ContainerBuilder $container)
|
||||
{
|
||||
@ -282,14 +281,11 @@ class MongoDBExtension extends Extension
|
||||
/**
|
||||
* Gets the configured connections.
|
||||
*
|
||||
* @param array $config An array of configuration settings
|
||||
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param array $config An array of configuration settings
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
protected function getConnections(array $config, ContainerBuilder $container)
|
||||
{
|
||||
if (isset($config['default_connection'])) {
|
||||
$container->setParameter('doctrine.odm.mongodb.default_connection', $config['default_connection']);
|
||||
}
|
||||
$defaultConnection = $container->getParameter('doctrine.odm.mongodb.default_connection');
|
||||
|
||||
$connections = array();
|
||||
@ -312,7 +308,7 @@ class MongoDBExtension extends Extension
|
||||
* Finds existing bundle subpaths.
|
||||
*
|
||||
* @param string $path A subpath to check for
|
||||
* @param Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder configuration
|
||||
* @param ContainerBuilder $container A ContainerBuilder configuration
|
||||
*
|
||||
* @return array An array of absolute directory paths
|
||||
*/
|
||||
@ -339,7 +335,7 @@ class MongoDBExtension extends Extension
|
||||
* Detects what metadata driver to use for the supplied directory.
|
||||
*
|
||||
* @param string $dir A directory path
|
||||
* @param Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder configuration
|
||||
* @param ContainerBuilder $container A ContainerBuilder configuration
|
||||
*
|
||||
* @return string|null A metadata driver short name, if one can be detected
|
||||
*/
|
||||
|
@ -26,6 +26,7 @@ class DoctrineMongoDBBundle extends Bundle
|
||||
public function buildContainer(ParameterBagInterface $parameterBag)
|
||||
{
|
||||
ContainerBuilder::registerExtension(new MongoDBExtension(
|
||||
$parameterBag->get('kernel.bundle_dirs'),
|
||||
$parameterBag->get('kernel.bundles'),
|
||||
$parameterBag->get('kernel.cache_dir')
|
||||
));
|
||||
|
@ -19,6 +19,8 @@ use Symfony\Components\DependencyInjection\Loader\YamlFileLoader;
|
||||
|
||||
abstract class AbstractMongoDBExtensionTest extends TestCase
|
||||
{
|
||||
abstract protected function loadFromFile(ContainerBuilder $container, $file);
|
||||
|
||||
public function testDependencyInjectionConfigurationDefaults()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
@ -196,7 +198,7 @@ abstract class AbstractMongoDBExtensionTest extends TestCase
|
||||
$definition = $container->getDefinition('doctrine.odm.mongodb.default_configuration');
|
||||
$calls = $definition->getMethodCalls();
|
||||
$this->assertTrue(isset($calls[0][1][0]['YamlBundle']));
|
||||
$this->assertEquals('Fixtures\YamlBundle\Document', $calls[0][1][0]['YamlBundle']);
|
||||
$this->assertEquals('Fixtures\Bundles\YamlBundle\Document', $calls[0][1][0]['YamlBundle']);
|
||||
}
|
||||
|
||||
public function testYamlBundleMappingDetection()
|
||||
@ -206,14 +208,14 @@ abstract class AbstractMongoDBExtensionTest extends TestCase
|
||||
|
||||
$loader->mongodbLoad(array(), $container);
|
||||
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/YamlBundle/Resources/config/doctrine/metadata'), $container->getParameter('doctrine.odm.mongodb.mapping_dirs'));
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/Bundles/YamlBundle/Resources/config/doctrine/metadata'), $container->getParameter('doctrine.odm.mongodb.mapping_dirs'));
|
||||
$this->assertEquals('%doctrine.odm.mongodb.mapping_dirs%', $container->getParameter('doctrine.odm.mongodb.xml_mapping_dirs'));
|
||||
$this->assertEquals('%doctrine.odm.mongodb.mapping_dirs%', $container->getParameter('doctrine.odm.mongodb.yml_mapping_dirs'));
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/YamlBundle/Document'), $container->getParameter('doctrine.odm.mongodb.document_dirs'));
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/Bundles/YamlBundle/Document'), $container->getParameter('doctrine.odm.mongodb.document_dirs'));
|
||||
|
||||
$calls = $container->getDefinition('doctrine.odm.mongodb.metadata_driver')->getMethodCalls();
|
||||
$this->assertEquals('doctrine.odm.mongodb.metadata_driver.yml', (string) $calls[0][1][0]);
|
||||
$this->assertEquals('Fixtures\YamlBundle\Document', $calls[0][1][1]);
|
||||
$this->assertEquals('Fixtures\Bundles\YamlBundle\Document', $calls[0][1][1]);
|
||||
}
|
||||
|
||||
public function testXmlBundleMappingDetection()
|
||||
@ -223,14 +225,14 @@ abstract class AbstractMongoDBExtensionTest extends TestCase
|
||||
|
||||
$loader->mongodbLoad(array(), $container);
|
||||
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/XmlBundle/Resources/config/doctrine/metadata'), $container->getParameter('doctrine.odm.mongodb.mapping_dirs'));
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/Bundles/XmlBundle/Resources/config/doctrine/metadata'), $container->getParameter('doctrine.odm.mongodb.mapping_dirs'));
|
||||
$this->assertEquals('%doctrine.odm.mongodb.mapping_dirs%', $container->getParameter('doctrine.odm.mongodb.xml_mapping_dirs'));
|
||||
$this->assertEquals('%doctrine.odm.mongodb.mapping_dirs%', $container->getParameter('doctrine.odm.mongodb.yml_mapping_dirs'));
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/XmlBundle/Document'), $container->getParameter('doctrine.odm.mongodb.document_dirs'));
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/Bundles/XmlBundle/Document'), $container->getParameter('doctrine.odm.mongodb.document_dirs'));
|
||||
|
||||
$calls = $container->getDefinition('doctrine.odm.mongodb.metadata_driver')->getMethodCalls();
|
||||
$this->assertEquals('doctrine.odm.mongodb.metadata_driver.xml', (string) $calls[0][1][0]);
|
||||
$this->assertEquals('Fixtures\XmlBundle\Document', $calls[0][1][1]);
|
||||
$this->assertEquals('Fixtures\Bundles\XmlBundle\Document', $calls[0][1][1]);
|
||||
}
|
||||
|
||||
public function testAnnotationsBundleMappingDetection()
|
||||
@ -243,11 +245,11 @@ abstract class AbstractMongoDBExtensionTest extends TestCase
|
||||
$this->assertEquals(array(), $container->getParameter('doctrine.odm.mongodb.mapping_dirs'));
|
||||
$this->assertEquals('%doctrine.odm.mongodb.mapping_dirs%', $container->getParameter('doctrine.odm.mongodb.xml_mapping_dirs'));
|
||||
$this->assertEquals('%doctrine.odm.mongodb.mapping_dirs%', $container->getParameter('doctrine.odm.mongodb.yml_mapping_dirs'));
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/AnnotationsBundle/Document'), $container->getParameter('doctrine.odm.mongodb.document_dirs'));
|
||||
$this->assertEquals(array(__DIR__.'/Fixtures/Bundles/AnnotationsBundle/Document'), $container->getParameter('doctrine.odm.mongodb.document_dirs'));
|
||||
|
||||
$calls = $container->getDefinition('doctrine.odm.mongodb.metadata_driver')->getMethodCalls();
|
||||
$this->assertEquals('doctrine.odm.mongodb.metadata_driver.annotation', (string) $calls[0][1][0]);
|
||||
$this->assertEquals('Fixtures\AnnotationsBundle\Document', $calls[0][1][1]);
|
||||
$this->assertEquals('Fixtures\Bundles\AnnotationsBundle\Document', $calls[0][1][1]);
|
||||
}
|
||||
|
||||
public function testDocumentManagerMetadataCacheDriverConfiguration()
|
||||
@ -295,9 +297,9 @@ abstract class AbstractMongoDBExtensionTest extends TestCase
|
||||
|
||||
protected function getMongoDbExtensionLoader($bundle = 'YamlBundle')
|
||||
{
|
||||
require_once __DIR__.'/Fixtures/'.$bundle.'/'.$bundle.'.php';
|
||||
$bundleDirs = array('Fixtures' => __DIR__.'/Fixtures');
|
||||
$bundles = array('Fixtures\\'.$bundle.'\\'.$bundle);
|
||||
require_once __DIR__.'/Fixtures/Bundles/'.$bundle.'/'.$bundle.'.php';
|
||||
$bundleDirs = array('Fixtures\\Bundles' => __DIR__.'/Fixtures/Bundles');
|
||||
$bundles = array('Fixtures\\Bundles\\'.$bundle.'\\'.$bundle);
|
||||
return new MongoDBExtension($bundleDirs, $bundles, sys_get_temp_dir());
|
||||
}
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\AnnotationsBundle\Document;
|
||||
|
||||
class Test
|
||||
{
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\Bundles\AnnotationsBundle;
|
||||
|
||||
use Symfony\Framework\Bundle\Bundle;
|
||||
|
||||
class AnnotationsBundle extends Bundle
|
||||
{
|
||||
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\Bundles\AnnotationsBundle\Document;
|
||||
|
||||
class Test
|
||||
{
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\Bundles\XmlBundle\Document;
|
||||
|
||||
class Test
|
||||
{
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\Bundles\XmlBundle;
|
||||
|
||||
use Symfony\Framework\Bundle\Bundle;
|
||||
|
||||
class XmlBundle extends Bundle
|
||||
{
|
||||
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\Bundles\YamlBundle\Document;
|
||||
|
||||
class Test
|
||||
{
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\Bundles\YamlBundle;
|
||||
|
||||
use Symfony\Framework\Bundle\Bundle;
|
||||
|
||||
class YamlBundle extends Bundle
|
||||
{
|
||||
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\XmlBundle\Document;
|
||||
|
||||
class Test
|
||||
{
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Fixtures\YamlBundle\Document;
|
||||
|
||||
class Test
|
||||
{
|
||||
}
|
@ -9,7 +9,7 @@
|
||||
<doctrine:mongodb
|
||||
metadata_cache_driver="apc"
|
||||
default_document_manager="dm2"
|
||||
default_connection="dm2"
|
||||
default_connection="conn1"
|
||||
proxy_namespace="Proxies"
|
||||
auto_generate_proxy_classes="true"
|
||||
>
|
||||
@ -26,8 +26,8 @@
|
||||
</doctrine:connection>
|
||||
</doctrine:connections>
|
||||
<doctrine:document_managers>
|
||||
<doctrine:document_manager id="dm1" server="mongodb://localhost:27017" metadata_cache_driver="xcache" connection="conn1" />
|
||||
<doctrine:document_manager id="dm2" server="mongodb://localhost:27017" connection="conn2" />
|
||||
<doctrine:document_manager id="dm1" metadata_cache_driver="xcache" connection="conn1" />
|
||||
<doctrine:document_manager id="dm2" connection="conn2" />
|
||||
</doctrine:document_managers>
|
||||
</doctrine:mongodb>
|
||||
</container>
|
@ -15,7 +15,7 @@
|
||||
</doctrine:connection>
|
||||
</doctrine:connections>
|
||||
<doctrine:document_managers>
|
||||
<doctrine:document_manager id="default" server="mongodb://localhost:27017" connection="default">
|
||||
<doctrine:document_manager id="default" connection="default">
|
||||
<metadata_cache_driver type="memcache">
|
||||
<class>Doctrine\Common\Cache\MemcacheCache</class>
|
||||
<host>localhost</host>
|
@ -18,7 +18,7 @@ class XmlMongoDBExtensionTest extends AbstractMongoDBExtensionTest
|
||||
{
|
||||
protected function loadFromFile(ContainerBuilder $container, $file)
|
||||
{
|
||||
$loadXml = new XmlFileLoader($container, __DIR__.'/Fixtures/xml');
|
||||
$loadXml = new XmlFileLoader($container, __DIR__.'/Fixtures/config/xml');
|
||||
$loadXml->load($file.'.xml');
|
||||
}
|
||||
}
|
@ -18,7 +18,7 @@ class YamlMongoDBExtensionTest extends AbstractMongoDBExtensionTest
|
||||
{
|
||||
protected function loadFromFile(ContainerBuilder $container, $file)
|
||||
{
|
||||
$loadYaml = new YamlFileLoader($container, __DIR__.'/Fixtures/yml');
|
||||
$loadYaml = new YamlFileLoader($container, __DIR__.'/Fixtures/config/yml');
|
||||
$loadYaml->load($file.'.yml');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user