【问题标题】:symfony2 doctrine postConnect event never triggeredsymfony2 原则 postConnect 事件从未触发
【发布时间】:2012-09-25 14:48:31
【问题描述】:

我正在尝试在 symfony2 项目中将教义与 oracle 10g 数据库一起使用。

一切正常,但是当我尝试在表中插入包含日期列的行时,出现以下错误:

[PDOException] SQLSTATE[HY000]:一般错误:1850 OCIStmtExecute: ORA-01850: ORA-01850: 小时必须在 0 到 23 之间 (ext\pdo_oci\oci_statement.c:148)

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

app/config/config.yml 

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

我尝试了这个解决方案,但它对我不起作用。所以我通过我的控制器手动将侦听器添加到学说中的 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 错误并且监听器没有正确设置。

我们将不胜感激。

谢谢。

【问题讨论】:

  • 调试here 以查看是否列出了事件侦听器。我猜它与默认连接参数有关。

标签: php symfony doctrine


【解决方案1】:

谢谢m2mdas。我能够根据您的建议调试事件管理器,但我发现我的侦听器未列出。所以我再次检查了我的 config.yml,结果发现它的格式不正确(缺少 2 个空白字符)。

无论如何,现在一切正常,非常感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多