在Symfony文档的Template Naming and Locations部分中,它说:
Symfony2使用bundle:controller:模板字符串语法 模板。这允许几种不同类型的模板 住在特定地点:
- AcmeBlogBundle:Blog:index.html.twig:此语法用于指定特定页面的模板。每个字符串的三个部分 用冒号(:)分隔,表示以下内容:
- AcmeBlogBundle :(包)模板存在于AcmeBlogBundle内(例如src / Acme / BlogBundle);博客:(控制器) 表示该模板位于Blog子目录中 资源/视图;
- index.html.twig :(模板)文件的实际名称是index.html.twig。
我想解析一个twig模板,并在我的数据夹具引导过程中将html持久保存到一个doctrine实体的属性中,如下所示:
// let's say it finds ./Data/Product/camera_description.html.twig
$productDescriptionTemplate = __DIR__.sprintf(
'/Data/Product/%s_description.html.twig',
$product->getName()
);
$product->setDescription(
$this->container->get('templating')->render(
$productDescriptionTemplate,
array()
)
);
$em->flush();
引发以下异常:
# would actually be an absolute path
[InvalidArgumentException]
Template name "./Data/Product/camera_description.html.twig
" is not valid (format is "bundle:section:template.format.engine").
是的我可以将产品描述模板移动到path/to/bundle/Resources/views/
但是我更感兴趣的是是否有可能绕过这个约定:有没有办法给枝条模板引擎相对或绝对< / em> twig模板的路径并让它没有使用约定bundle:controller:template
?
答案 0 :(得分:7)
您还可以按照此处所述创建新的命名空间:http://symfony.com/doc/current/cookbook/templating/namespaced_paths.html
例如:
paths:
"%kernel.root_dir%/../Data/Product/": product
应该允许你写:
'product::%s_description.html.twig',
或
'@product/%s_description.html.twig'
答案 1 :(得分:1)
如果您不想使用bundle:controller:template
语法,则可以尝试直接使用 twig :
$product->setDescription(
$this->container->get('twig')->render(
$productDescriptionTemplate,
array()
)
);