Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit b828617

Browse filesBrowse files
Brandon Turnerfabpot
Brandon Turner
authored andcommitted
[DoctrineBundle] Fixed multiple connections via XML
Fixed a bug (possibly introduced by e63ff6e) that prevented multiple DBAL connections from being configured via an XML configuration file. When multiple DBAL connections are specified via XML similar to: <doctrine:dbal> <doctrine:connections> <doctrine:connection id="conn1" .. /> <doctrine:connection id="conn2" .. /> </doctrine:connections> </doctrine:dbal> XMLFileLoader produces a configuration similar to: array('connections' => array( 'connection' => array( 0 => array( 'id' => 'conn1', ), 1 => array( 'id' => 'conn2', ) ) ) whereas when one connection is specified via XML similar to: <doctrine:dbal> <doctrine:connections> <doctrine:connection id="conn1" .. /> </doctrine:connections> </doctrine:dbal> XMLFileLoader produces a configuration similar to: array('connections' => array( 'connection' => array( 'id' => 'conn1', ) ) This commit fixes DoctrineExtension to properly handle both cases, while still supporting YAML configuration files.
1 parent 44757b0 commit b828617
Copy full SHA for b828617

File tree

Expand file treeCollapse file tree

4 files changed

+118
-1
lines changed
Filter options
Expand file treeCollapse file tree

4 files changed

+118
-1
lines changed

‎src/Symfony/Bundle/DoctrineBundle/DependencyInjection/DoctrineExtension.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/DoctrineBundle/DependencyInjection/DoctrineExtension.php
+6-1Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,12 @@ public function dbalLoad($config, ContainerBuilder $container)
8181

8282
$connections = array();
8383
if (isset($config['connections'])) {
84-
foreach ($config['connections'] as $name => $connection) {
84+
$config_connections = $config['connections'];
85+
if(isset($config['connections']['connection']) && isset($config['connections']['connection'][0])) {
86+
// Multiple connections
87+
$config_connections = $config['connections']['connection'];
88+
}
89+
foreach ($config_connections as $name => $connection) {
8590
$connections[isset($connection['id']) ? $connection['id'] : $name] = $connection;
8691
}
8792
} else {

‎src/Symfony/Bundle/DoctrineBundle/Tests/DependencyInjection/DoctrineExtensionTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/DoctrineBundle/Tests/DependencyInjection/DoctrineExtensionTest.php
+60Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Symfony\Bundle\DoctrineBundle\Tests\TestCase;
1515
use Symfony\Bundle\DoctrineBundle\DependencyInjection\DoctrineExtension;
1616
use Symfony\Components\DependencyInjection\BuilderConfiguration;
17+
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
1718

1819
class DoctrineExtensionTest extends TestCase
1920
{
@@ -46,4 +47,63 @@ public function testDbalLoad()
4647
$this->assertEquals('foo', $config['password']);
4748
$this->assertEquals('root', $config['user']);
4849
}
50+
51+
public function testDbalLoadFromXmlMultipleConnections()
52+
{
53+
$configuration = new BuilderConfiguration();
54+
$loader = new DoctrineExtension(array(), array());
55+
XmlFileLoader::registerExtension($loader);
56+
57+
$loadXml = new XmlFileLoader(__DIR__.'/Fixtures/xml');
58+
$configuration->merge($loadXml->load('dbal_service_multiple_connections.xml'));
59+
$configuration = $loader->dbalLoad(array(), $configuration);
60+
61+
// doctrine.dbal.mysql_connection
62+
$arguments = $configuration->getDefinition('doctrine.dbal.mysql_connection')->getArguments();
63+
$config = $arguments[0];
64+
65+
$this->assertEquals('mysql_s3cr3t', $config['password']);
66+
$this->assertEquals('mysql_user', $config['user']);
67+
$this->assertEquals('mysql_db', $config['dbname']);
68+
$this->assertEquals('/path/to/mysqld.sock', $config['unix_socket']);
69+
70+
// doctrine.dbal.sqlite_connection
71+
$arguments = $configuration->getDefinition('doctrine.dbal.sqlite_connection')->getArguments();
72+
$config = $arguments[0];
73+
74+
$this->assertEquals('sqlite_s3cr3t', $config['password']);
75+
$this->assertEquals('sqlite_user', $config['user']);
76+
$this->assertEquals('sqlite_db', $config['dbname']);
77+
$this->assertEquals(true, $config['memory']);
78+
79+
// doctrine.dbal.oci_connection
80+
$arguments = $configuration->getDefinition('doctrine.dbal.oci_connection')->getArguments();
81+
$config = $arguments[0];
82+
83+
$this->assertEquals('oracle_s3cr3t', $config['password']);
84+
$this->assertEquals('oracle_user', $config['user']);
85+
$this->assertEquals('oracle_db', $config['dbname']);
86+
$this->assertEquals('utf8', $config['charset']);
87+
}
88+
89+
90+
public function testDbalLoadFromXmlSingleConnection()
91+
{
92+
$configuration = new BuilderConfiguration();
93+
$loader = new DoctrineExtension(array(), array());
94+
XmlFileLoader::registerExtension($loader);
95+
96+
$loadXml = new XmlFileLoader(__DIR__.'/Fixtures/xml');
97+
$configuration->merge($loadXml->load('dbal_service_single_connection.xml'));
98+
$configuration = $loader->dbalLoad(array(), $configuration);
99+
100+
// doctrine.dbal.mysql_connection
101+
$arguments = $configuration->getDefinition('doctrine.dbal.mysql_connection')->getArguments();
102+
$config = $arguments[0];
103+
104+
$this->assertEquals('mysql_s3cr3t', $config['password']);
105+
$this->assertEquals('mysql_user', $config['user']);
106+
$this->assertEquals('mysql_db', $config['dbname']);
107+
$this->assertEquals('/path/to/mysqld.sock', $config['unix_socket']);
108+
}
49109
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" ?>
2+
3+
<container xmlns="http://www.symfony-project.org/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xmlns:doctrine="http://www.symfony-project.org/schema/dic/doctrine"
6+
xsi:schemaLocation="http://www.symfony-project.org/schema/dic/services http://www.symfony-project.org/schema/dic/services/services-1.0.xsd
7+
http://www.symfony-project.org/schema/dic/doctrine http://www.symfony-project.org/schema/dic/doctrine/doctrine-1.0.xsd">
8+
9+
<doctrine:dbal>
10+
<doctrine:connections>
11+
<doctrine:connection
12+
id="mysql"
13+
dbname="mysql_db"
14+
user="mysql_user"
15+
password="mysql_s3cr3t"
16+
unix_socket="/path/to/mysqld.sock" /><!-- -->
17+
<doctrine:connection
18+
id="sqlite"
19+
driver="PDOSqlite"
20+
dbname="sqlite_db"
21+
user="sqlite_user"
22+
password="sqlite_s3cr3t"
23+
memory="true" />
24+
<doctrine:connection
25+
id="oci"
26+
driver="OCI8"
27+
dbname="oracle_db"
28+
user="oracle_user"
29+
password="oracle_s3cr3t"
30+
charset="utf8" />
31+
</doctrine:connections>
32+
</doctrine:dbal>
33+
</container>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" ?>
2+
3+
<container xmlns="http://www.symfony-project.org/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xmlns:doctrine="http://www.symfony-project.org/schema/dic/doctrine"
6+
xsi:schemaLocation="http://www.symfony-project.org/schema/dic/services http://www.symfony-project.org/schema/dic/services/services-1.0.xsd
7+
http://www.symfony-project.org/schema/dic/doctrine http://www.symfony-project.org/schema/dic/doctrine/doctrine-1.0.xsd">
8+
9+
<doctrine:dbal>
10+
<doctrine:connections>
11+
<doctrine:connection
12+
id="mysql"
13+
dbname="mysql_db"
14+
user="mysql_user"
15+
password="mysql_s3cr3t"
16+
unix_socket="/path/to/mysqld.sock" /><!-- -->
17+
</doctrine:connections>
18+
</doctrine:dbal>
19+
</container>

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.