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

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

问题描述

我在 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屋!

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