Symfony 2 Twig表单功能不可用

时间:2013-12-01 10:35:50

标签: php symfony twig

我在自定义类中创建了一个新的Twig Environment对象,该类正在从现有的twig文件中呈现。我试图在我的twig文件中渲染一个表单,该文件是从我的自定义类渲染的,但是在这个新的Twig_Environment对象表单函数不可用时,我尝试将现有表单扩展从symfony自己的twig对象添加到我的新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"

我正在使用symfony自己的twig对象来呈现响应,但这给了我同样的错误。你能帮忙吗?我正在使用Symfony 2.3.4

如果我渲染一个普通的控制器,表单函数可用,如果我创建一个自定义的树枝对象,它们就不能正常工作。

2 个答案:

答案 0 :(得分:4)

我已经这样解决了:

$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;

答案 1 :(得分:3)

这是我的工作代码(在控制器操作中执行):

$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来电(否则扩展程序已经初始化)。