我有一个很大的应用程序使用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
,但我希望有一种更清洁的方式。
欢迎提出任何使这种方式变得懒惰的建议。