我正在创建一个新的控制器提供程序,我将在多个项目中使用它,并且我需要在此控制器提供程序的目录中有几个树枝模板,以便在该提供程序的某些路由中使用。我想避免将所有要使用此控制器提供程序的项目的所有模板文件复制到项目目录中(将其放在twig.path
指定目录下),所以我的问题是:
如何渲染不在twig.path
目录下的模板?我可以告诉树枝服务提供者呈现一个特定的路径,比如__DIR__.'/views/some.template.twig'
在控制器提供者文件中吗?
您可以使用 $app['twig.loader.filesystem'] 访问 twig loader。
例如,把它放在你的控制器类的连接方法中
$app['twig.loader.filesystem']->addPath(
$pathToTemplates
);
也存在 Twig_Loader_Filesystem::prependPath()
您还可以为路径指定命名空间。为此,只需添加命名空间的名称作为第二个参数,例如“NAMESPACE”。在这种情况下,您可以$app['twig']->render('@NAMESPACE/pathToATemplate');
在渲染模板时在命名空间之前通过 Note @-char 访问模板。
像这样的东西应该工作
$app['twig'] = $app->share($app->extend('twig', function($twig) use ($yourNewPath) {
$twig->addLoader(new \Twig_Loader_Filesystem($yourNewPath));
return $twig;
}));