我正在以这种方式在Silex注册Doctrine:
// Doctrine
$this->register(new DoctrineServiceProvider(), array(
'db.options' => $this['config']['doctrine']['db.options']
));
$this->register(new DoctrineOrmServiceProvider());
$this['orm.em.options'] = $this['config']['doctrine']['orm.em.options'];
如果我插入一个重复的行,那么我会得到这个例外:
完整性约束违规:1062重复条目
我使用try / catch捕获了这个异常。如果以后我再次尝试使用Doctrine,现在总是显示此异常:
EntityManager已关闭。
如果我尝试按照这些步骤(The EntityManager is closed)重新加载EntityManager:
if (!$app['orm.em']->isOpen()) {
$app['orm.em'] = $app['orm.em']->create(
$app['orm.em']->getConnection(), $app['orm.em']->getConfiguration(), $app['orm.em']->getEventManager()
);
}
但是现在显示了这个例外:
无法覆盖冻结服务“orm.em”
在发生Doctrine异常后,如何在Silex中使用Doctrine提供程序?
感谢。
答案 0 :(得分:0)
可以从冷冻状态中移除。然后创建新的EntityManager。
$manager = $app['orm.em'];
$app->offsetUnset('orm.em');
$app->offsetSet('orm.em', $manager->create($manager->getConnection(), $manager->getConfiguration()));