2016-11-03 2 views
0

Я регистрирующий Учение в Silex таким образом:Silex Доктрина «EntityManager закрыта» после того, как доктрина Exception

// 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. Если позже я попытаюсь снова использовать Доктрину, теперь всегда отображается это исключение:

EntityManager закрыт.

Если я пытаюсь перезагрузить EntityManager, выполнив следующие действия (The EntityManager is closed):

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 в Силексе после исключения Doctrine is ha ppened?

Спасибо.

+0

Вы не можете. За исключением исключения, менеджер закрывается по дизайну. Если вам действительно нужно получить доступ к базе данных после такого исключения, создайте два менеджера сущностей и используйте их исключительно для очистки после исключения. В противном случае перенаправляйтесь и переходите. – Cerad

+0

Возможный дубликат [The EntityManager закрыт] (http://stackoverflow.com/questions/14258591/the-entitymanager-is-closed) – olibiaz

+0

Почему вы не проверяете, существует ли запись, а затем только вставляете данные, если нет существующих запись. – sonam

ответ

0

Можно удалить из замороженного состояния. А затем создайте новый EntityManager.

$manager = $app['orm.em']; 
$app->offsetUnset('orm.em'); 
$app->offsetSet('orm.em', $manager->create($manager->getConnection(), $manager->getConfiguration())); 
Смежные вопросы