2016-03-24 3 views
0

Прошло некоторое время с тех пор, как я работал над чем-то. Я использую очень старый синтаксический анализатор шаблонов, и я подумал, что пришло время перейти к Twig.Глобальные переменные Twig (несимфонии)

Он выглядит очень хорошо и хотел бы работать с ним, но я сталкиваюсь с некоторыми проблемами, которые, похоже, не могут найти решение. Я видел несколько вопросов по моему вопросу, но не буду работать, и большую часть времени они с symfony.

Так что позвольте мне объяснить;

Я использую свой index.php как главную страницу (frontcontroller) и включаю в нее файлы. Поскольку я использую правильное меню, отображающее информацию для входа и т. Д., Которое будет отображаться в файле base.html, таким образом, отображается в каждом шаблоне ... Мне нужно найти способ установить массив глобальных символов в моем файле index.php ,

Я знаю, что есть $ twig-> addGlobal ('test', 'Это мой тест); но нужно будет добавить многие из них.

Существует расширение с помощью getGlobals(), но вам нужно вручную добавить их в предоставленный массив, и я не могу найти способ передать массив формы моего индекса на него. Кроме того, если я заглядываю в него, он говорит, что он устарел.

Возможно, я посмотрю на это, или Twig - это не решение для меня? любая помощь приветствуется здесь, и спасибо заранее!

Nico.

ответ

1

Вы можете использовать расширение Twig:

class MyTwigExtension extends Twig_Extension implements Twig_Extension_GlobalsInterface 
{ 
    private $some; 

    private $data; 

    public function __construct($some, $data) { 
     $this->some = $some; 
     $this->data = $data; 
    } 

    public function getGlobals() 
    { 
     $globals = array(); 

     // .. create globals by using the properties defined above 

     return $globals; 
    } 

    // ... 
} 

Метод getGlobals действительно устарел, но в код, который они говорят:

@deprecated с 1.23 (до b е удалены в 2.0), реализовать Twig_Extension_GlobalsInterface вместо

Таким образом, используя метод getGlobals не рекомендуется, если вы реализуете Twig_Extension_GlobalsInterface.

Когда вы создаете Twig_Environment добавить расширение, как это:

$twig = new Twig_Environment($loader); 
$twig->addExtension(new MyTwigExtension($passYour, $data)); 

Так в основном вы передаете все данные, необходимые для создания глобалов конструктору расширения.

+0

Класс MyTwigExtension, опубликованный выше, содержит только необходимые части для ответа на вопрос. Конечно, вы должны реализовать все необходимые методы. Что именно сообщение об ошибке вы получаете? –

+0

Мне пришлось пройти через функцию getName или это дало мне ошибку. Как мне передать свой массив? Пример: $ global_array = [ \t 'var1' \t \t => 'output1', \t 'var2' \t \t => 'output2', \t // .... ... \t]; – Kohlzz

+0

Используйте параметры конструктора. Я описал это в своем ответе. –

-1

Как насчет передачи $GLOBALS на Twig_Enviroment?

$ TwigLoader = новая Twig_Loader_Filesystem ([...]);

$ Twig = новый Twig_Environment ($ TwigLoader, массива ( 'Глобал' => $ GLOBALS ) );

затем в шаблоне Twig:

{{}} globals.your_variable_name

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