Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony:是否有任何方法可以使用到模板的相对路径来渲染细枝模板?_Php_Symfony_Twig - Fatal编程技术网

Php Symfony:是否有任何方法可以使用到模板的相对路径来渲染细枝模板?

Php Symfony:是否有任何方法可以使用到模板的相对路径来渲染细枝模板?,php,symfony,twig,Php,Symfony,Twig,在Symfony文档的一节中,它说: Symfony2使用bundle:controller:template字符串语法 模板。这允许使用几种不同类型的模板,每种类型 居住在特定位置的: AcmeBlogBundle:Blog:index.html.twig:此语法用于为特定页面指定模板。绳子的三个部分,每个部分 以冒号(:)分隔,表示以下内容: AcmeBlogBundle:(bundle)模板位于AcmeBlogBundle内部(例如src/Acme/BlogBundle);博客:(控制器

在Symfony文档的一节中,它说:

Symfony2使用bundle:controller:template字符串语法 模板。这允许使用几种不同类型的模板,每种类型 居住在特定位置的:

  • AcmeBlogBundle:Blog:index.html.twig:此语法用于为特定页面指定模板。绳子的三个部分,每个部分 以冒号(:)分隔,表示以下内容:
  • AcmeBlogBundle:(bundle)模板位于AcmeBlogBundle内部(例如src/Acme/BlogBundle);博客:(控制器) 指示模板位于的Blog子目录中 资源/观点
  • index.html.twig:(模板)文件的实际名称是index.html.twig
我想在我的数据装置引导过程中解析一个细枝模板并将html持久化到一个条令实体的属性中,如下所示:

// 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/
,但我更感兴趣的是,是否可以绕过此约定:是否有一种方法可以为细枝模板引擎提供细枝模板的相对或绝对路径,并使其不必使用该约定
bundle:controller:template

如果不想使用
bundle:controller:template
语法,则可以直接尝试使用

$product->setDescription(
    $this->container->get('twig')->render(
        $productDescriptionTemplate, 
        array()
    )
);

您还可以创建一个新的命名空间,如下所述:

例如:

paths:
        "%kernel.root_dir%/../Data/Product/": product
这样你就可以写:

'product::%s_description.html.twig', 


我尝试了这一点,并收到了与原始帖子中提到的相同的异常。相关:在回顾了我的答案之后,我相信你的答案是最好的解决方案,因为没有内置的方法可以简单地将细枝传递到模板的相对路径。如果我能做到这一点,这是可能的,但这对我的目的来说太复杂了。
'@product/%s_description.html.twig'