4

いくつかのプロジェクトで使用する新しいコントローラー プロバイダーを作成しています。このプロバイダーのルートの一部で使用するために、このコントローラー プロバイダーのディレクトリ内に 2 つの twig テンプレートが必要です。このコントローラープロバイダーを使用するすべてのプロジェクトのすべてのテンプレートファイルをプロジェクトディレクトリにコピーする必要がないようにしたいので(twig.path指定されたディレクトリの下に配置するため)、私の質問は次のとおりです:

twig.pathディレクトリの下にないテンプレートをレンダリングするにはどうすればよいですか? __DIR__.'/views/some.template.twig'コントローラープロバイダーファイルのように、特定のパスをレンダリングするように twig サービスプロバイダーに指示できますか?

4

2 に答える 2

4

$app['twig.loader.filesystem'] を使用して twig ローダーにアクセスできます。

たとえば、これを接続メソッドのコントローラークラスに入れます

$app['twig.loader.filesystem']->addPath(
    $pathToTemplates
);

Twig_Loader_Filesystem::prependPath() も存在します

パスの名前空間を指定することもできます。これを行うには、名前空間の名前を 2 番目のパラメーターとして追加します (たとえば、'NAMESPACE')。$app['twig']->render('@NAMESPACE/pathToATemplate');その場合、レンダリング時に名前空間の前に @-char を指定してテンプレートにアクセスできます。

于 2013-01-16T10:50:20.153 に答える
1

このようなものが動作するはずです

$app['twig'] = $app->share($app->extend('twig', function($twig) use ($yourNewPath) {
    $twig->addLoader(new \Twig_Loader_Filesystem($yourNewPath));
    return $twig;
}));
于 2012-11-19T23:21:08.183 に答える