Symfony2项目中使用了2个数据库。我需要动态更改第二个数据库详细信息。
有没有办法在Symfony2的控制器中的函数中使用容器setParameter()
?
下面是一段代码,我需要动态更改数据库名称:
$container = $this->container;
$container->setParameter('second_database_host','localhost');
$container->setParameter('second_database_name','test');
$container->setParameter('second_database_user','root');
$container->setParameter('second_database_password','root');
$parameter_bag = $container->getParameterBag();
$service_manager = $container->get('projects_objects.manager');
$object_import = $service_manager->import($service_type));
但上面的代码会将错误视为Impossible to call set() on a frozen ParameterBag.
我可以通过其他方式更改这些参数吗?
答案 0 :(得分:0)
如果你在运行时发现数据库坐标我建议动态创建一个EntityManager并通过setter方法将其传递给服务。您的服务可以在$ em类字段上公开一个setter,以接受外部EntityManager来执行这些操作。
因此,在您的控制器中,您可以按照this回答中所述实例化新的EntityManager:
$conn = array(
'driver' => 'pdo_mysql',
'user' => 'root',
'password' => '',
'dbname' => 'foo'
);
$new = \Doctrine\ORM\EntityManager::create(
$conn,
$em->getConfiguration(),
$em->getEventManager()
);
然后将其传递给服务:
$service_manager = $container->get('projects_objects.manager');
$service_manager->setEntityManager($new); // <-- the entity manager istantiate on the fly
$object_import = $service_manager->import($service_type));
服务如此:
....
// the entity manager
protected $em;
public function setEntityManager($em)
{
$this->em=$em;
}
希望这个帮助