symfony2 doctrine postConnect事件从未触发过

时间:2012-09-25 14:48:31

标签: php symfony doctrine

我正在尝试在symfony2项目中使用带有oracle 10g数据库的doctrine。

一切正常但是当我尝试在表中插入一个带日期列的行时,我收到以下错误:

  

[PDOException] SQLSTATE [HY000]:常规错误:1850 OCIStmtExecute:   ORA-01850:ORA-01850:小时必须介于0到23之间   (分机\ PDO_OCI \ oci_statement.c:148)

根据How to use Doctrine OracleSessionInit listener with Symfony2?,可以通过将Doctrine \ DBAL \ Event \ Listeners \ OracleSessionInit类添加到Doctrine中的事件管理器来修复此错误。

app/config/config.yml 

services:
    my.listener:
        class: Doctrine\DBAL\Event\Listeners\OracleSessionInit 
        tags:
            - { name: doctrine.event_listener, event: postConnect }

我试过这个解决方案,但它对我没用。所以我通过我的控制器手动将监听器添加到了docManager中的eventManager:

public function indexAction()
    {
        $product= new Product();
        $product->setCreationDate(new \DateTime());
        $this->getDoctrine()->getConnection()->getEventManager()->addEventSubscriber($this->get('my.listener'));
        $em->persist($product);
        $em->flush();
        return array();
    }

这是有效的,但这不是很优雅,我不想用我的所有控制器做到这一点......

所以我的听众似乎正常工作。在我看来,postConnect事件永远不会被触发,或者我的config.yml是错误的,并且没有正确设置监听器。

非常感谢一些帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

谢谢m2mdas。我能够根据你的建议调试事件管理器,我发现我的监听器没有列出。所以我再次检查了我的config.yml,结果发现它没有很好地形成(缺少2个空白字符)。

无论如何,现在一切都很好,非常感谢你的帮助。