Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在entityManager实例上设置活动的SQL筛选器_Php_Doctrine Orm_Zend Framework2 - Fatal编程技术网

Php 在entityManager实例上设置活动的SQL筛选器

Php 在entityManager实例上设置活动的SQL筛选器,php,doctrine-orm,zend-framework2,Php,Doctrine Orm,Zend Framework2,我有一个使用ZF2和Doctrine2以及DoctrineORMModule的大型应用程序。在配置中,我定义了一个自定义SQL过滤器 'doctrine' => [ 'configuration' => [ 'orm_default' => [ 'filters' => [ 'myFilter' => 'MyNamespace\MyFilter' ]

我有一个使用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');
}
一切正常,这很好。 然而,即使我根本不需要实体管理器,这段代码也会在所有请求上执行。这真的会影响我的应用程序性能,因为所有的重型条令工厂都会被调用(每次请求都会增加100ms)

如果只在调用EntityManager工厂时才添加启用的过滤器,那就太好了。 我真的很想做这样的事情,但这似乎还没有实现

'doctrine' => [
    'configuration' => [
        'orm_default' => [
            'active_filters' => [
                'myFilter'
            ]
        ]
    ]
]
作为最后的手段,我可以覆盖
EntityManagerFactory
,但我希望有更干净的方法。
欢迎您提出任何建议,让这项工作变得更轻松。

查看delegator工厂->谢谢您的评论。这是我在做了更多的研究后最终使用的。它工作得很好。没问题,布拉姆,你可能想用你如何解决它来回答你的问题,可以帮助其他人。