Расширение имени ветки глобальное

До версии 1.12 в расширениях веток было возможно определить метод getGlobals следующим образом:

public function getGlobals()
{
    return array($this->getName() => $this);
}

установить глобальное имя для расширений, которые реализуют много методов, и было возможно вызвать расширение "foo" с методами bar и baz, например так:

{{ foo.bar }} {{ foo.baz }}

Учитывая, что метод getGlobasl теперь устарел и будет удален в Twig 2, как можно получить тот же эффект без использования getGlobals?

1 ответ

Сам столкнулся с этим только сейчас. Вы можете "исправить" это используя EventListener, подключившись к kernel.view:

Очевидно, работает только при использовании @Template аннотации от sensio extra bundle.

public function onKernelView(GetResponseForControllerResultEvent $event)
{
    $params = $event->getControllerResult();
    $params['baddesign'] = $this->myservice->getSomethingThatsUsedEverywhere();
    $event->setControllerResult($params);
}

public static function getSubscribedEvents()
{
    return array(
        KernelEvents::VIEW => 'onKernelView',
    );
}

mybundle.globalvarlistener:
    class: MyBundle\EventListener\MyListener
    tags:
        - { name: kernel.event_subscriber }
Другие вопросы по тегам