gpt4 book ai didi

php - 如何在 php 中设置 Symfony 2 从数据库配置

转载 作者:行者123 更新时间:2023-11-29 12:11:28 25 4
gpt4 key购买 nike

我有一个带有 Doctrine 的 Symfony 2.7 应用程序。

我正在尝试设置从属数据库。

我们使用储物柜来管理我们的服务器配置。

我们使用常量来保存所有数据库配置,例如:

<?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中创建您的从站配置数组,然后直接设置从站参数。

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

关于php - 如何在 php 中设置 Symfony 2 从数据库配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30598436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com