Silex Doctrine“Doctrine异常后,EntityManager已关闭”

时间:2016-11-03 20:05:43

标签: exception doctrine-orm doctrine entitymanager silex

我正在以这种方式在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提供程序?

感谢。

1 个答案:

答案 0 :(得分:0)

可以从冷冻状态中移除。然后创建新的EntityManager。

$manager = $app['orm.em'];
$app->offsetUnset('orm.em');
$app->offsetSet('orm.em', $manager->create($manager->getConnection(), $manager->getConfiguration()));