renderFile不加载自定义的Twig扩展名

时间:2013-07-08 14:19:32

标签: php symfony twig

我正在尝试创建自己的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”

有什么想法吗?

1 个答案:

答案 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