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 拡張機能のみが読み込まれます。そして、私はエラーが発生します

edit.html.twig の 9 行目にフィルタ「price」が存在しません

何か案は?

4

1 に答える 1

2

SensioGeneratorBundleは、指定したメソッドで独自の Twig インスタンスを作成しrenderFile()、呼び出しによって使用されている Symfony のサービス コンテナーにロードされた Twig インスタンスと共通点はありません$this->container->get('templating')->renderResponse()

また、ここではサービス コンテナの Twig インスタンスを使用できません。Sensio のスケルトン レンダリングを壊す可能性のある動作がいくつかあるためです。したがって、新しい Twig Environment インスタンスはrenderFile()メソッドで意図的に作成されます。

renderFile()次のように、メソッドで新しく作成された Twig Environment インスタンスにフィルターを手動で追加する必要があります。

$twig->addFilter($filter);

Twig フィルターについて: http://twig.sensiolabs.org/doc/advanced.html#filters

于 2013-07-08T15:18:07.327 に答える