在entityManager instanciation上设置活动的doctrine SQL过滤器

时间:2014-08-29 09:29:28

标签: php doctrine-orm zend-framework2

我有一个很大的应用程序使用ZF2和Doctrine2并使用DoctrineORMModule。在配置中我定义了一个自定义SQL过滤器。

'doctrine' => [
    'configuration' => [
        'orm_default' => [
            'filters' => [
                'myFilter' => 'MyNamespace\MyFilter'
            ]
        ]
    ]
]

过滤器在onBootstrap方法中激活。

public function onBootstrap(EventInterface $e)
{
    $serviceManager = $e->getApplication()->getServiceManager();
    $entityManager = $serviceManager->get('Doctrine\ORM\EntityManager');
    $entityManager->getFilters()->enable('myFilter');
}

一切都按预期工作,这很好。 但是,即使我根本不需要实体管理器,此代码也会在所有请求上执行。这确实会影响我的应用程序性能,因为所有重型的doctrine工厂都会被调用(每次请求都会增加100ms)。

如果仅在调用EntityManager工厂时添加启用的过滤器,那将是很好的。 我真的很喜欢这样做,但这似乎不是一个实现的功能。

'doctrine' => [
    'configuration' => [
        'orm_default' => [
            'active_filters' => [
                'myFilter'
            ]
        ]
    ]
]

作为最后的手段,我可​​以覆盖EntityManagerFactory,但我希望有一种更清洁的方式。 欢迎提出任何使这种方式变得懒惰的建议。

0 个答案:

没有答案