2013-09-30 2 views
2

TL; DR: Я сделал заказ прут расширение и теперь веточки базовые функции не работаютTwig Базовые функции не работают после собственного расширения сделал

Так немного предысторию. У меня есть этот файл twig (masterMacro.html.twig), который содержит ссылки на все мои макросы. Я пытался создать глобальную переменную twig, которая позволила бы мне не импортировать masterMacro.html.twig на каждую страницу, а просто вызвать глобальную переменную.

Для иллюстрации. Вместо того, чтобы сделать это

{% import 'FooBarbundle:Macros:masterMacros.html.twig' as macros %} 
{{ macros.fooMacro() }} 

Я пытался сделать это так, что я бы только сделать:

{{ FooBarMacros.fooMacro() }} 

Так что я написал этот обычай расширение, которое выглядит следующим образом:

/** FooBarBundle\Twig\Globals\FooBarBundleMacrosGlobal.php */ 
<?php 

namespace Bar\FooBarBundle\Twig\Globals; 


class FooBarBundleMacrosGlobal extends \Twig_Extension{ 

    /** 
     * Returns a list of global variables to add to the existing list. 
     * 
     * @return array An array of global variables 
     */ 
     public function getGlobals() 
     { 

      $loader = new \Twig_Loader_Filesystem(array('/web/bar/Bar/FooBarBundle/Resources/views/Macros')); 

      $twig = new \Twig_Environment($loader); 

      return array(
       'FooBarMacros' => $twig->loadTemplate('masterMacro.html.twig') 
      ); 
     } 

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

} 

а потом зарегистрировал его в качестве службы

services: 
    foobar.twig.FooBarMacrosGlobal 
     class:  Bar\FooBarBundle\Twig\Globals\FooBarMacrosGlobal 
     tags: 
      - { name: twig.extension } 

Так что хорошая новость в том, что глобальный макрос работал. Теперь я могу назвать только FooBarMacros.fooMacro(), и все работает. ОДНАКО, теперь ни одна из обычных функций твига не работает.

Например, я пытаюсь использовать дамп как так и я получаю там следующее сообщение об ошибке:

{{ dump('hello world') }} 
The function "dump" does not exist in myTemplate.html.twig at line 219 

Любой ключ, что происходит? Это мое первое расширение ветки, поэтому я уверен, что я что-то там прикрутил.

Спасибо за помощь заранее,

Дрю Ландграф

ответ

1

Мое предположение:

создается новый экземпляр \ Twig_Environment. Возможно, это уже используется Symfony, и это, очевидно, не имеет функций, определенных каким-либо расширением.

В руководстве есть метод initRuntime, где «[...] вы можете загрузить файл, содержащий функции фильтра, например». В качестве параметра у вас есть глобальный экземпляр \ Twig_Environment.

Итак, я хотел бы попробовать поставить $ twig-> LoadTemplate() в initRuntime(), сохраните возвращенный объект в переменной объекта и вернуть это в getGlobals()

Смежные вопросы