如何在 php 中设置 Symfony 2 从属数据库配置
How to set Symfony 2 slave database config in php
我有一个带有 Doctrine 的 Symfony 2.7 应用程序。
我正在尝试设置从属数据库。
我们使用 lockerbox 来管理我们的服务器配置。
我们使用常量来保存所有数据库配置,例如:
<?php
define('DB_MASTER_HOST', 'localhost');
define('DB_MASTER_USER', 'user');
define('DB_MASTER_PASS', 'password');
define('DB_MASTER_NAME', 'db_name');
define('DB_SLAVE_ENABLED', FALSE);
define('DB_SLAVE_HOST', 'server-1,server-2');
define('DB_SLAVE_USER', 'username1,username2');
define('DB_SLAVE_PASS', 'password1,password2');
define('DB_SLAVE_NAME', 'db_name,db_name');
我们可以有多个从属数据库,配置以逗号分隔。
由于 lockerbox 配置可以随时更改并且 lockerbox 配置不可编辑以复制 Symfony YAML 格式我需要一种方法来设置配置 parameters.php.
我能够以标准的 Symfony 方式手动配置从属数据库:
...other configs...
# Doctrine Configuration
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
keep_slave: true
slaves:
slave1:
dbname: db_slave_name
host: db_slave_server
user: username
password: password
...other configs
到目前为止我已经试过了,但它不起作用
<?php
// set default database connection info
$container->setParameter('database_host', DB_MASTER_HOST);
$container->setParameter('database_user', DB_MASTER_USER);
$container->setParameter('database_password', DB_MASTER_PASS);
$container->setParameter('database_name', DB_MASTER_NAME);
if (DB_SLAVE_ENABLED) {
$slave_hosts = explode(',', DB_SLAVE_HOST);
$slave_names = explode(',', DB_SLAVE_NAME);
$slave_users = explode(',', DB_SLAVE_USER);
$slave_passwords = explode(',', DB_SLAVE_PASS);
$slave_count = min(count($slave_hosts), count($slave_names), count($slave_passwords), count($slave_users));
if ($slave_count) {
// add all slaves to config
error_log('we have slaves and they are enabled');
$container->setParameter('doctrine.dbal.slaves.slave2.host', $slave_hosts[0]);
$container->setParameter('doctrine.dbal.slaves.slave2.name', $slave_names[0]);
$container->setParameter('doctrine.dbal.slaves.slave2.user', $slave_users[0]);
$container->setParameter('doctrine.dbal.slaves.slave2.password', $slave_passwords[0]);
}
} // end DB_SLAVE_ENABLED
知道如何在 Symfony 2.7 中以编程方式设置多个从属数据库吗?
您可以在 parameters.php
中创建您的 slaves 配置数组,然后直接设置 slaves 参数。
parameters.php
if (DB_SLAVE_ENABLED) {
// ...
if ($slave_count) {
// add all slaves to config
error_log('we have slaves and they are enabled');
$slaves = array();
for ($i = 0; $i < $slave_count; $i++) {
$slaves['slave_'.$i] = array(
'host' => $slave_hosts[$i],
'dbname' => $slave_names[$i],
'user' => $slave_users[$i],
'password' => $slave_passwords[$i],
);
}
$container->setParameter('database_slaves', $slaves);
}
}
config.yml
...other configs...
# Doctrine Configuration
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
keep_slave: true
slaves: "%database_slaves%"
...other configs
我有一个带有 Doctrine 的 Symfony 2.7 应用程序。
我正在尝试设置从属数据库。
我们使用 lockerbox 来管理我们的服务器配置。
我们使用常量来保存所有数据库配置,例如:
<?php
define('DB_MASTER_HOST', 'localhost');
define('DB_MASTER_USER', 'user');
define('DB_MASTER_PASS', 'password');
define('DB_MASTER_NAME', 'db_name');
define('DB_SLAVE_ENABLED', FALSE);
define('DB_SLAVE_HOST', 'server-1,server-2');
define('DB_SLAVE_USER', 'username1,username2');
define('DB_SLAVE_PASS', 'password1,password2');
define('DB_SLAVE_NAME', 'db_name,db_name');
我们可以有多个从属数据库,配置以逗号分隔。
由于 lockerbox 配置可以随时更改并且 lockerbox 配置不可编辑以复制 Symfony YAML 格式我需要一种方法来设置配置 parameters.php.
我能够以标准的 Symfony 方式手动配置从属数据库:
...other configs...
# Doctrine Configuration
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
keep_slave: true
slaves:
slave1:
dbname: db_slave_name
host: db_slave_server
user: username
password: password
...other configs
到目前为止我已经试过了,但它不起作用
<?php
// set default database connection info
$container->setParameter('database_host', DB_MASTER_HOST);
$container->setParameter('database_user', DB_MASTER_USER);
$container->setParameter('database_password', DB_MASTER_PASS);
$container->setParameter('database_name', DB_MASTER_NAME);
if (DB_SLAVE_ENABLED) {
$slave_hosts = explode(',', DB_SLAVE_HOST);
$slave_names = explode(',', DB_SLAVE_NAME);
$slave_users = explode(',', DB_SLAVE_USER);
$slave_passwords = explode(',', DB_SLAVE_PASS);
$slave_count = min(count($slave_hosts), count($slave_names), count($slave_passwords), count($slave_users));
if ($slave_count) {
// add all slaves to config
error_log('we have slaves and they are enabled');
$container->setParameter('doctrine.dbal.slaves.slave2.host', $slave_hosts[0]);
$container->setParameter('doctrine.dbal.slaves.slave2.name', $slave_names[0]);
$container->setParameter('doctrine.dbal.slaves.slave2.user', $slave_users[0]);
$container->setParameter('doctrine.dbal.slaves.slave2.password', $slave_passwords[0]);
}
} // end DB_SLAVE_ENABLED
知道如何在 Symfony 2.7 中以编程方式设置多个从属数据库吗?
您可以在 parameters.php
中创建您的 slaves 配置数组,然后直接设置 slaves 参数。
parameters.php
if (DB_SLAVE_ENABLED) {
// ...
if ($slave_count) {
// add all slaves to config
error_log('we have slaves and they are enabled');
$slaves = array();
for ($i = 0; $i < $slave_count; $i++) {
$slaves['slave_'.$i] = array(
'host' => $slave_hosts[$i],
'dbname' => $slave_names[$i],
'user' => $slave_users[$i],
'password' => $slave_passwords[$i],
);
}
$container->setParameter('database_slaves', $slaves);
}
}
config.yml
...other configs...
# Doctrine Configuration
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
keep_slave: true
slaves: "%database_slaves%"
...other configs