在我的应用程序中,公司有自己的子域。我正在侦听内核请求事件,并根据与子域匹配的公司设置公司过滤器(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的情况下解决此问题。
由于
答案 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中一样调用过滤器/函数模板。