在Symfony2中的每个请求设置Doctrine过滤器的参数 [英] Set parameter for Doctrine filter on every request in Symfony2

查看:386
本文介绍了在Symfony2中的每个请求设置Doctrine过滤器的参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Symfony2项目中有一个Doctrine过滤器。我试图将filter的参数设置为每个请求的某些值(取自会话)。
问题是,在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆