我正在自定义类中创建一个新的细枝环境对象,该类是从现有细枝文件渲染的。我试图在我的twig文件中呈现一个表单,该表单是从我的自定义类呈现的,但是在这个新的twig_环境中,对象表单函数不可用,我尝试将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;
我得到的错误是
第8行EmailUs.html.twig中不存在函数“form_start”
我使用symfony自己的twig对象来呈现响应,但这给了我同样的错误。你能帮忙吗?我正在使用Symfony 2.3。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;
以下是我的工作代码(在控制器操作中执行):
$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
调用之前(否则扩展将已经初始化)。