在 Symfony2 中的每个请求上为 Doctrine 过滤器设置参数 [英] Set parameter for Doctrine filter on every request in Symfony2
问题描述
我在 Symfony2 项目中有一个 Doctrine 过滤器.我试图在每个请求上将过滤器的参数设置为某个值(取自会话).问题是过滤器对象是在 Symfony 的 onKernelRequest 事件之后创建的,所以我不能从那里设置它.如果我尝试在 Doctrine 的 postConnect 事件循环依赖中设置它:
I have a Doctrine filter in Symfony2 project. I am trying to set filter's parameter to some value (taken from session) on every request. The problem is that filter object is created after Symfony's onKernelRequest event, so I can't set it from there. If I try to set it in Doctrine's postConnect event circular dependency is detected:
ServiceCircularReferenceException: Circular reference detected for service "doctrine.orm.private_entity_manager", path: "routing.loader -> assetic.asset_manager -> twig -> translator.default -> doctrine.orm.private_entity_manager -> doctrine.dbal.private_connection -> year_visibility.parameter_setter".
问题是,我应该在哪里(或者更确切地说如何)设置过滤器的参数?
The question is, where (or rather how) should I set filter's parameter?
推荐答案
可以尝试手动定义过滤器,同时传递需要的参数.
You can try to define filters manually and pass required parameters at the same time.
services:
app.filter_manager:
class: AppBundleAppBundleFilterFilterManager
arguments: [@doctrine.orm.entity_manager, @session]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
在过滤器管理器类中:
// ...
public function __construct(EntityManager $em, SessionInterface $session)
{
$this->em = $em;
$this->session = $session;
}
// ...
public function onKernelRequest()
{
$this->em->getConfiguration()->addFilter('filter_name', 'Filter/Class/Name/With/Ns');
$filter = $this->em->getFilters()->enable('filter_name');
$filter->setParameter('param_name', $this->session->get('param_name'));
}
这篇关于在 Symfony2 中的每个请求上为 Doctrine 过滤器设置参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!