在Symfony2中的每个请求设置Doctrine过滤器的参数 [英] Set parameter for Doctrine filter on every request in Symfony2
本文介绍了在Symfony2中的每个请求设置Doctrine过滤器的参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问题是,在Symfony的onKernelRequest事件之后创建过滤器对象,所以我无法从那里进行设置。如果我尝试在Doctrine的postConnect事件中设置循环依赖关系:
ServiceCircularReferenceException:检测到服务的循环引用doctrine.orm .private_entity_manager,路径:routing.loader - > assetic.asset_manager - > twig - > translator.default - > doctrine.orm.private_entity_manager - > doctrine.dbal.private_connection - > year_visibility.parameter_setter。问题是,我应该设置过滤器的参数(或者更确切地说如何)?/ / code>
b $ b
解决方案
您可以尝试手动定义过滤器并同时传递所需参数。
服务:
app.filter_manager:
类:App \Bundle\AppBundle\Filter\FilterManager
参数:[@ doctrine.orm .entity_manager,@session]
标签:
- {name:kernel.event_listener,event:kernel.request,方法: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'));
}
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: App\Bundle\AppBundle\Filter\FilterManager
arguments: [@doctrine.orm.entity_manager, @session]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
And in the filter manager class:
// ...
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屋!
查看全文