Php 在entityManager实例上设置活动的SQL筛选器
我有一个使用ZF2和Doctrine2以及DoctrineORMModule的大型应用程序。在配置中,我定义了一个自定义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' ]
'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工厂->谢谢您的评论。这是我在做了更多的研究后最终使用的。它工作得很好。没问题,布拉姆,你可能想用你如何解决它来回答你的问题,可以帮助其他人。