/** * Loads the Doctrine ORM configuration. * * @param array $config A configuration array * * @return BuilderConfiguration A BuilderConfiguration instance */ public function ormLoad($config) { $configuration = new BuilderConfiguration(); $loader = new XmlFileLoader(__DIR__ . '/../Resources/config'); $configuration->merge($loader->load($this->resources['orm'])); $config['default_entity_manager'] = isset($config['default_entity_manager']) ? $config['default_entity_manager'] : 'default'; foreach (array('metadata_driver', 'cache_driver') as $key) { if (isset($config[$key])) { $configuration->setParameter('doctrine.orm.' . $key, $config[$key]); } } $config['entity_managers'] = isset($config['entity_managers']) ? $config['entity_managers'] : array($config['default_entity_manager'] => array()); foreach ($config['entity_managers'] as $name => $connection) { $ormConfigDef = new Definition('Doctrine\\ORM\\Configuration'); $configuration->setDefinition(sprintf('doctrine.orm.%s_configuration', $name), $ormConfigDef); $drivers = array('metadata', 'query', 'result'); foreach ($drivers as $driver) { $definition = $configuration->getDefinition(sprintf('doctrine.orm.cache.%s', $configuration->getParameter('doctrine.orm.cache_driver'))); $clone = clone $definition; $clone->addMethodCall('setNamespace', array(sprintf('doctrine_%s_', $driver))); $configuration->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 (array_reverse($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)); $configuration->setDefinition('doctrine.orm.metadata_driver', $mappingDriverDef); $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' => '%kernel.cache_dir%/doctrine/Proxies', '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->setConstructor('create'); $configuration->setDefinition(sprintf('doctrine.orm.%s_entity_manager', $name), $ormEmDef); if ($name == $config['default_entity_manager']) { $configuration->setAlias('doctrine.orm.entity_manager', sprintf('doctrine.orm.%s_entity_manager', $name)); } } $configuration->setAlias('doctrine.orm.cache', sprintf('doctrine.orm.cache.%s', $configuration->getParameter('doctrine.orm.cache_driver'))); return $configuration; }
protected function parseDefinition(BuilderConfiguration $configuration, $id, $service, $file) { if (is_string($service) && 0 === strpos($service, '@')) { $configuration->setAlias($id, substr($service, 1)); return; } $definition = new Definition($service['class']); if (isset($service['shared'])) { $definition->setShared($service['shared']); } if (isset($service['constructor'])) { $definition->setConstructor($service['constructor']); } if (isset($service['file'])) { $definition->setFile($service['file']); } if (isset($service['arguments'])) { $definition->setArguments($this->resolveServices($service['arguments'])); } if (isset($service['configurator'])) { if (is_string($service['configurator'])) { $definition->setConfigurator($service['configurator']); } else { $definition->setConfigurator(array($this->resolveServices($service['configurator'][0]), $service['configurator'][1])); } } if (isset($service['calls'])) { foreach ($service['calls'] as $call) { $definition->addMethodCall($call[0], $this->resolveServices($call[1])); } } if (isset($service['annotations'])) { foreach ($service['annotations'] as $annotation) { $name = $annotation['name']; unset($annotation['name']); $definition->addAnnotation($name, $annotation); } } $configuration->setDefinition($id, $definition); }
* For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ require_once __DIR__ . '/../../../bootstrap.php'; use Symfony\Components\DependencyInjection\Definition; $t = new LimeTest(21); // __construct() $t->diag('__construct()'); $def = new Definition('stdClass'); $t->is($def->getClass(), 'stdClass', '__construct() takes the class name as its first argument'); $def = new Definition('stdClass', array('foo')); $t->is($def->getArguments(), array('foo'), '__construct() takes an optional array of arguments as its second argument'); // ->setConstructor() ->getConstructor() $t->diag('->setConstructor() ->getConstructor()'); $def = new Definition('stdClass'); $t->is(spl_object_hash($def->setConstructor('foo')), spl_object_hash($def), '->setConstructor() implements a fluent interface'); $t->is($def->getConstructor(), 'foo', '->getConstructor() returns the constructor name'); // ->setClass() ->getClass() $t->diag('->setClass() ->getClass()'); $def = new Definition('stdClass'); $t->is(spl_object_hash($def->setClass('foo')), spl_object_hash($def), '->setClass() implements a fluent interface'); $t->is($def->getClass(), 'foo', '->getClass() returns the class name'); // ->setArguments() ->getArguments() ->addArgument() $t->diag('->setArguments() ->getArguments() ->addArgument()'); $def = new Definition('stdClass'); $t->is(spl_object_hash($def->setArguments(array('foo'))), spl_object_hash($def), '->setArguments() implements a fluent interface'); $t->is($def->getArguments(), array('foo'), '->getArguments() returns the arguments'); $t->is(spl_object_hash($def->addArgument('bar')), spl_object_hash($def), '->addArgument() implements a fluent interface'); $t->is($def->getArguments(), array('foo', 'bar'), '->addArgument() adds an argument'); // ->setMethodCalls() ->getMethodCalls() ->addMethodCall() $t->diag('->setMethodCalls() ->getMethodCalls() ->addMethodCall()');
public function testSetGetConstructor() { $def = new Definition('stdClass'); $this->assertEquals(spl_object_hash($def->setConstructor('foo')), spl_object_hash($def), '->setConstructor() implements a fluent interface'); $this->assertEquals($def->getConstructor(), 'foo', '->getConstructor() returns the constructor name'); }