2

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

    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);

    }

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

有没有办法在每个树枝过滤器/功能/标签之前执行一些代码?喜欢听树枝活动吗?或者如何在不调用每个树枝过滤器/功能/标签的 setCompanyFilter 的情况下解决此问题。

谢谢

4

1 回答 1

0

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

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

<?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 模板中调用过滤器/函数。

于 2015-09-14T13:59:14.753 回答