0

我想在 symfony2 中检索当前由学说 2 dbal 连接使用的密码。

如果我使用$kernel->getContainer()->getParameter('database_password'),我可以找到在 parameters.yml 中定义的那个,但是如果我为某些环境定义不同的密码(例如在 config_test.yml 中),则来自 parameters.yml 的数据是无用的。

现在,如果我仔细看$kernel->getContainer()->getParameterBag()->all(),我仍然找不到它。

如果你想知道为什么?我在函数中使用了锁定机制,并且我试图register_shutdown_function()使用 php 内置的 mysql 或 pdo 函数来删除该锁定以防出现致命错误,因为那时大部分框架都已关闭。

4

2 回答 2

1

如果您无法检索它,那么您也将没有数据库连接。

测试环境中的参数不会加载到 dev、prod、... 环境中!在覆盖的情况下,在 parameters.yml 中定义所有连接参数

//parameters.yml
database_prod_name: prod
database_prod_user: prod_user
database_prod_password: prod_password

database_dev_name: dev
database_dev_user: dev_user
.....

//config_prod.yml
doctrine:
    dbal:
        dbname:   "%database_prod_name%"
        user:     "%database_prod_user%"
        password: "%database_prod_password%"
....

您使用的所有其他环境也是如此。

于 2013-01-17T10:30:23.443 回答
1

如果您需要通过内核对象访问容器和连接,请使用以下代码:

$connection = $kernel->getContainer()->get('doctrine')->getConnection();

如果您需要获取和设置容器参数,您可以使用以下代码:

$container->setParameter('database_name', 'xyz');
$db_password = $container->getParameter("database_password");
于 2016-04-28T13:58:12.550 回答