Doctrine2过滤参数空值树枝扩展

时间:2015-09-14 12:52:01

标签: symfony twig twig-extension

在我的应用程序中,公司有自己的子域。我正在侦听内核请求事件,并根据与子域匹配的公司设置公司过滤器(Doctrine Filter)参数。

    public function setCompanyFilter($companyId)
    {
        /** @var EntityManager $entityManager */
        $entityManager = $this->container->get('doctrine')->getManager();
        $filters = $entityManager->getFilters();

        $companyFilter = $filters->isEnabled('company_filter')
            ? $filters->getFilter('company_filter')
            : $filters->enable('company_filter');

        $companyFilter->setParameter('company', $companyId);

    }

我遇到的问题是在树枝扩展(过滤器/功能)上没有设置参数。如果我在执行过滤器/函数之前设置了值,一切都按预期工作。

有没有办法在每个twig filter / function / tag之前执行一些代码?喜欢听枝杈活动?或者如何在不调用每个树枝过滤器/函数/标记上的setCompanyFilter的情况下解决此问题。

由于

1 个答案:

答案 0 :(得分:0)

为什么不在您正在收听的同一事件(即kernel.request)中设置自定义值?

我假设您使用的是自定义twig extension。如果没有扩展你已经使用的过滤器/功能并执行相同的操作:

<?php

// src/AppBundle/Twig/AppExtension.php
namespace AppBundle\Twig;

class AppExtension extends \Twig_Extension
{
    private $customParameter;

    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('price', array($this, 'priceFilter')),
        );
    }

    public function priceFilter($number, $decimals = 0, $decPoint = '.', $thousandsSep = ',')
    {
        $price = number_format($number, $decimals, $decPoint, $thousandsSep);
        $price = '$'.$price;

        return $price;
    }

    public function getName()
    {
        return 'app_extension';
    }

    public function setCustomParameter($parameter)
    {
        $this->customParameter = $parameter;
    }
}

将twig扩展名注入当前的侦听器,然后调用方法setCustomParameter,注入自定义参数以供稍后在请求生命周期中使用,然后像通常在现有的twig中一样调用过滤器/函数模板。