Ejemplo n.º 1
0
 /**
  * Loads the DBAL configuration.
  *
  * @param array                                                        $config        An array of configuration settings
  * @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
  */
 public function dbalLoad($config, ContainerBuilder $container)
 {
     if (!$container->hasDefinition('propel')) {
         $loader = new XmlFileLoader($container, __DIR__ . '/../Resources/config');
         $loader->load($this->resources['propel']);
     }
     $defaultConnection = array('driver' => 'mysql', 'user' => 'root', 'password' => null, 'dsn' => null, 'classname' => 'DebugPDO', 'options' => array(), 'attributes' => array(), 'settings' => array('charset' => array('value' => 'UTF8')));
     $defaultConnectionName = isset($config['default_connection']) ? $config['default_connection'] : $container->getParameter('propel.dbal.default_connection');
     $container->setParameter('propel.dbal.default_connection', $defaultConnectionName);
     $connections = array();
     if (isset($config['connections'])) {
         foreach ($config['connections'] as $name => $connection) {
             $connections[isset($connection['id']) ? $connection['id'] : $name] = $connection;
         }
     } else {
         $connections = array($defaultConnectionName => $config);
     }
     $arguments = $container->getDefinition('propel.configuration')->getArguments();
     if (count($arguments)) {
         $c = $arguments[0];
     } else {
         $c = array('log' => array('level' => 7), 'datasources' => array());
     }
     foreach ($connections as $name => $connection) {
         if (isset($c['datasources'][$name])) {
         } else {
             $connection = array_replace($defaultConnection, $connection);
             $c['datasources'][$name] = array('connection' => array());
         }
         if (isset($connection['driver'])) {
             $c['datasources'][$name]['adapter'] = $connection['driver'];
         }
         foreach (array('dsn', 'user', 'password', 'classname', 'options', 'attributes', 'settings') as $att) {
             if (isset($connection[$att])) {
                 $c['datasources'][$name]['connection'][$att] = $connection[$att];
             }
         }
     }
     $container->getDefinition('propel.configuration')->setArguments(array($c));
 }
Ejemplo n.º 2
0
 /**
  * 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']))));
 }
Ejemplo n.º 3
0
 /**
  * Loads the templating configuration.
  *
  * @param array                                                        $config        An array of configuration settings
  * @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
  */
 public function templatingLoad($config, ContainerBuilder $container)
 {
     if (!$container->hasDefinition('templating')) {
         $loader = new XmlFileLoader($container, __DIR__ . '/../Resources/config');
         $loader->load($this->resources['templating']);
     }
     if (array_key_exists('escaping', $config)) {
         $container->setParameter('templating.output_escaper', $config['escaping']);
     }
     if (array_key_exists('assets_version', $config)) {
         $container->setParameter('templating.assets.version', $config['assets_version']);
     }
     // path for the filesystem loader
     if (isset($config['path'])) {
         $container->setParameter('templating.loader.filesystem.path', $config['path']);
     }
     // loaders
     if (isset($config['loader'])) {
         $loaders = array();
         $ids = is_array($config['loader']) ? $config['loader'] : array($config['loader']);
         foreach ($ids as $id) {
             $loaders[] = new Reference($id);
         }
         if (1 === count($loaders)) {
             $container->setAlias('templating.loader', (string) $loaders[0]);
         } else {
             $container->getDefinition('templating.loader.chain')->addArgument($loaders);
             $container->setAlias('templating.loader', 'templating.loader.chain');
         }
     }
     // cache?
     $container->setParameter('templating.loader.cache.path', null);
     if (isset($config['cache'])) {
         // wrap the loader with some cache
         $container->setDefinition('templating.loader.wrapped', $container->findDefinition('templating.loader'));
         $container->setDefinition('templating.loader', $container->getDefinition('templating.loader.cache'));
         $container->setParameter('templating.loader.cache.path', $config['cache']);
     }
 }
Ejemplo n.º 4
0
 /**
  * @covers Symfony\Components\DependencyInjection\ContainerBuilder::merge
  */
 public function testMerge()
 {
     $container = new ContainerBuilder(new ParameterBag(array('bar' => 'foo')));
     $config = new ContainerBuilder(new ParameterBag(array('foo' => 'bar')));
     $container->merge($config);
     $this->assertEquals(array('bar' => 'foo', 'foo' => 'bar'), $container->getParameterBag()->all(), '->merge() merges current parameters with the loaded ones');
     $container = new ContainerBuilder(new ParameterBag(array('bar' => 'foo')));
     $config = new ContainerBuilder(new ParameterBag(array('foo' => '%bar%')));
     $container->merge($config);
     ////// FIXME
     $container->freeze();
     $this->assertEquals(array('bar' => 'foo', 'foo' => 'foo'), $container->getParameterBag()->all(), '->merge() evaluates the values of the parameters towards already defined ones');
     $container = new ContainerBuilder(new ParameterBag(array('bar' => 'foo')));
     $config = new ContainerBuilder(new ParameterBag(array('foo' => '%bar%', 'baz' => '%foo%')));
     $container->merge($config);
     ////// FIXME
     $container->freeze();
     $this->assertEquals(array('bar' => 'foo', 'foo' => 'foo', 'baz' => 'foo'), $container->getParameterBag()->all(), '->merge() evaluates the values of the parameters towards already defined ones');
     $container = new ContainerBuilder();
     $container->register('foo', 'FooClass');
     $container->register('bar', 'BarClass');
     $config = new ContainerBuilder();
     $config->setDefinition('baz', new Definition('BazClass'));
     $config->setAlias('alias_for_foo', 'foo');
     $container->merge($config);
     $this->assertEquals(array('foo', 'bar', 'baz'), array_keys($container->getDefinitions()), '->merge() merges definitions already defined ones');
     $this->assertEquals(array('alias_for_foo' => 'foo'), $container->getAliases(), '->merge() registers defined aliases');
     $container = new ContainerBuilder();
     $container->register('foo', 'FooClass');
     $config->setDefinition('foo', new Definition('BazClass'));
     $container->merge($config);
     $this->assertEquals('BazClass', $container->getDefinition('foo')->getClass(), '->merge() overrides already defined services');
 }