Symfony:有没有办法使用模板的相对路径渲染树枝模板?

时间:2014-03-29 17:46:45

标签: php symfony twig

在Symfony文档的Template Naming and Locations部分中,它说:

  

Symfony2使用bundle:controller:模板字符串语法   模板。这允许几种不同类型的模板   住在特定地点:

     
      
  • AcmeBlogBu​​ndle:Blog:index.html.twig:此语法用于指定特定页面的模板。每个字符串的三个部分   用冒号(:)分隔,表示以下内容:
  •   
  • AcmeBlogBu​​ndle :(包)模板存在于AcmeBlogBu​​ndle内(例如src / Acme / BlogBu​​ndle);博客:(控制器)   表示该模板位于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

2 个答案:

答案 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()
    )
);