Я создаю новый объект Twig Environment внутри пользовательского класса, этот класс визуализируется из существующего файла twig. Я пытаюсь отобразить форму в моем файле twig, который отображается из моего пользовательского класса, однако в этой новой функции формы объекта Twig_Environment недоступны, я попытался добавить существующее расширение формы из собственного объекта twig symfony к моему новому объекту twig, это тоже не работает.
$path = 'some/directory'; // just simplifying here $loader = new \Twig_Loader_Filesystem( $path ); $twig = new \Twig_Environment($loader, array( 'cache' => __DIR__.'/../../../../../../app/cache/', )); $tmpl = $twig->loadTemplate('EmailUs.html.twig'); $twig->addExtension( new \Symfony\Bridge\Twig\Extension\FormExtension( $this->pageObj->getContainer()->get('twig.form.renderer') ) ); $response = new Response(); $response->setContent($tmpl); return $response;
Ошибка, которую я получаю
«Функция« form_start »не существует в EmailUs.html.twig в строке 8"
Я использовал собственный объект twig для Symfony, чтобы отобразить ответ, но это дало мне ту же ошибку. Можете ли вы помочь PLS? Я использую Symfony 2.3.4
Функции формы доступны, если я визуализирую обычный контроллер, они не работают нормально, если я создаю пользовательский объект twig.
Я решил это так:
$loader = $pageFunctions->getContainer()->get('twig.loader'); $loader->addPath( $path ); $twig = new \Twig_Environment($loader, array( 'cache' => __DIR__.'/../../../../../../app/cache/myTwig', )); foreach( $this->twig->getExtensions() as $ext ) { $twig->addExtension( $ext ); } $tmpl = $twig->loadTemplate('EmailUs.html.twig'); $rendered = $tmpl->display( array('control' => $this, 'functions' => $pageFunctions, 'params' => $params, 'email_form'=>$form->createView() ) ); return $rendered;
Вот мой рабочий код (выполненный внутри действия контроллера):
$path = __DIR__.'/../Resources/views/'; /* twig loader path */ $loader = new \Twig_Loader_Filesystem($path); $twig = new \Twig_Environment($loader); $twig->addExtension( new \Symfony\Bridge\Twig\Extension\FormExtension($this->get('twig.form.renderer'))); $tmpl = $twig->loadTemplate('test.html.twig'); return new Response($tmpl->render(array()));
В основном я переместил вызов addExtension
перед loadTemplate
(иначе расширения уже были бы инициализированы).