我想在symfony2中检索doctrine2 dbal连接当前使用的密码。
如果我使用$kernel->getContainer()->getParameter('database_password')
,我可以找到在parameters.yml中定义的那个,但是如果我为某些环境定义了不同的密码(例如在config_test.yml中),来自parameters.yml的数据是无用的。 / p>
现在如果我通过$kernel->getContainer()->getParameterBag()->all()
看,我仍然找不到它。
如果你想知道为什么?我在一个函数中使用了一个锁机制,我正在尝试使用register_shutdown_function()
删除该锁以防万一发生致命错误,使用php内置的mysql或pdo函数,因为在那时,大多数框架已经失效。
答案 0 :(得分: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%"
....
您使用的所有其他环境也是如此。
答案 1 :(得分:1)
如果您需要通过内核对象访问Container和Connection,请使用以下代码:
$connection = $kernel->getContainer()->get('doctrine')->getConnection();
如果你需要获取并设置容器参数,你可以使用下面的代码:
$container->setParameter('database_name', 'xyz');
$db_password = $container->getParameter("database_password");