1

我正在尝试创建自己的生成器,使用 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 中不存在

有任何想法吗?

4

1 回答 1

2

SensioGeneratorBundle在您提供的方法中创建它自己的 Twig 实例renderFile(),它与加载到 Symfony 的服务容器中的 Twig 实例没有任何共同之处,该容器正在通过调用$this->container->get('templating')->renderResponse().

而且你不能在这里使用来自服务容器的 Twig 实例,因为它有一些行为可能会破坏 Sensio 的骨架渲染。因此,新的 Twig Environment 实例是在renderFile()方法中有意创建的。

您需要在方法中手动将过滤器添加到新创建的 Twig Environment 实例中renderFile(),如下所示:

$twig->addFilter($filter);

关于 Twig 过滤器: http: //twig.sensiolabs.org/doc/advanced.html#filters

于 2013-07-08T15:18:07.327 回答