我正在尝试创建自己的Generator,使用SensioGeneratorBundle作为核心。但是自定义Twig扩展加载存在问题。 如果我使用
return $this->container->get('templating')->renderResponse('Acme:Generator/Work:edit.html.twig', array());
扩展功能正常,但如果我使用
return $this->renderFile('edit.html.twig', array('entity' => $entity));
,其中
protected function renderFile($template, $parameters)
{
$twig = new \Twig_Environment(new \Twig_Loader_Filesystem($this->skeletonDirs), array(
'debug' => true,
'autoReload' => true,
'cache' => false,
'strict_variables' => true,
'autoescape' => true,
));
return $twig->render($template, $parameters);
}
仅加载核心Twig扩展。而且我收到错误
第9行的edit.html.twig中不存在过滤器“price”
有什么想法吗?
答案 0 :(得分:2)
SensioGeneratorBundle
在您给出的renderFile()
方法中创建了自己的Twig实例,并且它与加载到Symfony的服务容器中的Twig实例没有任何共同之处,该容器通过调用{{1 }}
你不能在服务容器中使用Twig实例,因为它有一些行为可能会破坏Sensio的骨架渲染。因此,新的Twig Environment实例是在$this->container->get('templating')->renderResponse()
方法中有意创建的。
您需要在renderFile()
方法中手动将过滤器添加到新创建的Twig Environment实例,简单如下:
renderFile()
关于Twig过滤器: http://twig.sensiolabs.org/doc/advanced.html#filters