首页 > 解决方案 > 如何获取模板包含在 Symfony/Twig 中的模板名称

问题描述

我在 twig 中有一个部分模板,我包含在我的应用程序的不同模板中。

部分.html.twig

<p>My partial template</p>

所以例如我可以在另一个模板中使用这个模板:

my_template.html.twig

<% include partial.html.twig %>

我的目标是以某种方式动态获取包含partial.html.twig的所有模板名称。

这可能吗 ?

标签: phpsymfonytwig

解决方案


我也(像 Stratadox 一样)怀疑这是否正是你应该做的,但无论如何如果你必须获得partial.html.twig包含模板的所有模板,你可以像这样使用 Symfony Finder 组件:

// App/Controller/DefaultController.php
public function foo(){
    $templatesDir = $this->get('kernel')->getProjectDir() . '/templates';
    $finder = new Symfony\Component\Finder\Finder();
    $finder->files()->in($templatesDir)->contains("{% include 'partial.html.twig' %}");
    $templateNames = [];
    foreach ($finder as $template) {
        $templateNames[] = $template->getFilename();
    }
}

现在你可以用这些名字做任何你想做的事。

当然,在包含partial.html.twig包含此字符串的或注释时,您必须处理诸如双引号和单引号之类的问题,而没有真正包含模板(不太可能的情况)。

您可以通过使用合适的正则表达式而不是字符串contains()作为$finder.


推荐阅读