2

私のアプリケーションでは、会社が独自のサブドメインを持っています。カーネルリクエストイベントをリッスンし、サブドメインに一致する会社に基づいて Company Filter(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 拡張機能 (フィルター/関数) でパラメーターが設定されていないことです。フィルター/関数を実行する前に値を設定すると、すべてが期待どおりに機能します。

すべての小枝フィルター/関数/タグの前にコードを実行する方法はありますか? 小枝のイベントを聞くのが好きですか?または、すべての小枝フィルター/関数/タグで 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 に答える