Я использую файл, который служит в качестве макета формы для перезаписывания определенных элементов ( form_start , form_row и т. Д.). Я регистрирую его так:
twig: - AcmeMainBundle:Form:formlayout.html.twig
Есть ли способ использовать в нем мои переменные, представленные вместе с формой ?
Например, когда я отправляю index.html.twig
array ('form' => $formView, 'var' => $var);
Вар определяется только в index.html.twig .
Итак, как сделать var, определенный в formlayout.html.twig
Вы можете использовать addGlobal()
.
Например, в BaseController я использую:
$this->get('twig')->addGlobal('is_test', $isTest);
поэтому в вашем случае вы, вероятно, должны:
$this->get('twig')->addGlobal('var', $var);
Чтобы установить глобальную переменную в Twig, я создал сервисный вызов «@get_available_languages» (вернуть массив), а затем в моем классе событий kernel.request я выполнил следующее:
class LocaleListener implements EventSubscriberInterface { private $defaultLocale; public function __construct($defaultLocale = 'en', ContainerInterface $container) { $this->defaultLocale = $defaultLocale; $this->container = $container; } public function onKernelRequest(GetResponseEvent $event) { //Add twig global variables $this->addTwigGlobals(); } public function addTwigGlobals(){ //Add avaialble language to twig template as a global variable $this->container->get('twig')->addGlobal('available_languages', $this->container->get('get_available_languages')); } public static function getSubscribedEvents() { return array( // must be registered before the default Locale listener KernelEvents::REQUEST => array(array('onKernelRequest', 17)), ); } }
надеюсь, это поможет
мир
В случае, если вы не используете симфонию, но используете ветку на своем, она проста:
<?php $loader = new \Twig_Loader_Filesystem('path/to/templates'); $twig = new \Twig_Environment($loader); $twig->addGlobal('key1', 'var1'); $twig->addGlobal('key2', 'var2');