Php twig中的动态{%use%}语句?

Php twig中的动态{%use%}语句?,php,twig,Php,Twig,我想实现以下目标: 我的所有页面都有一个基本模板,名为“\u page\u base.twig”。它包含页眉和页脚 然后我为页面的不同区域创建了一个模板:“topic.twig”、“section.twig”和“article.twig”——它们都扩展了“\u page\u base.twig”,到目前为止效果很好 现在我想写我的文章。我也希望将它们保存为.twig文件,因为我可以在编辑器中编辑完整的标记并上传它 既然我不能说我的文章文件只是扩展了“article.twig”(多重继承是不可能的

我想实现以下目标:

我的所有页面都有一个基本模板,名为“
\u page\u base.twig
”。它包含页眉和页脚

然后我为页面的不同区域创建了一个模板:“
topic.twig
”、“
section.twig
”和“
article.twig
”——它们都扩展了“
\u page\u base.twig
”,到目前为止效果很好

现在我想写我的文章。我也希望将它们保存为.twig文件,因为我可以在编辑器中编辑完整的标记并上传它

既然我不能说我的文章文件只是扩展了“
article.twig
”(多重继承是不可能的),我可以告诉“
article.twig
”它应该使用来自不同文章内容twigfile的块。 问题是:“use”语句必须硬编码

我当前的解决方案是将
{%use“[PLACEHOLDER]”“%}
添加到“
article.twig
”中,然后将模板加载到字符串中,将占位符替换为正确的article-content.twig,然后将整个内容传递给模板引擎。真是一团糟

你们有什么更好的解决方案吗?

-没有动态名称空间

LiipThemeBundle可能是一个解决方案:

-没有动态名称空间

LiipThemeBundle可能是一个解决方案:

除非我不理解这个问题,否则显示一篇文章只需要扩展u page_base.twig


如果您需要显示多篇文章,您可以使用一个模板来显示文章列表,该模板还可以扩展u page_base.twig并将文章列表传递给此模板。

除非我不理解这个问题,否则显示一篇文章只需要扩展u page_base.twig即可

{# on article.twig#}

{% set articles = ['someArticle.twig', ...] %}
{% for article in articles %}
    {% include article %}
{% endfor %}

{# on someArticle.twig #}
... Article text ...

在需要显示多篇文章的情况下,您可以使用一个专用于显示文章列表的模板,该模板还可以扩展u page_base.twig并将文章列表传递到此模板。

您可以尝试使用include标记。由于此标记接受要包含的动态名称模板,因此只需定义一个包含article twig模板名称的变量

{# on article.twig#}

{% set articles = ['someArticle.twig', ...] %}
{% for article in articles %}
    {% include article %}
{% endfor %}

{# on someArticle.twig #}
... Article text ...
如果您需要自定义
someArticle.twig中的某些内容,您可以进入下一个级别:嵌入标记。您应该在
someArticle.twig
中定义一个块标记,该块将成为自定义值的占位符

{# on article.twig#}

{% set articles=['someArticle.twig', ...] %}
{% for article in articles %}
    {% embed article %}
        {% block inside_text_article %}
            ... custom text ...
        {% endblock %}
    {% endembed %}
{% endfor %}


{# on someArticle.twig #}
    ... article text ...
    {% block inside_text_article %}default values{% endblock %}
    ... article text ...

您可以尝试使用include标记。由于此标记接受要包含的动态名称模板,因此只需定义一个包含article twig模板名称的变量

{# on article.twig#}

{% set articles = ['someArticle.twig', ...] %}
{% for article in articles %}
    {% include article %}
{% endfor %}

{# on someArticle.twig #}
... Article text ...
如果您需要自定义
someArticle.twig中的某些内容,您可以进入下一个级别:嵌入标记。您应该在
someArticle.twig
中定义一个块标记,该块将成为自定义值的占位符

{# on article.twig#}

{% set articles=['someArticle.twig', ...] %}
{% for article in articles %}
    {% embed article %}
        {% block inside_text_article %}
            ... custom text ...
        {% endblock %}
    {% endembed %}
{% endfor %}


{# on someArticle.twig #}
    ... article text ...
    {% block inside_text_article %}default values{% endblock %}
    ... article text ...

实际上,我使用了另一种方法:加载和解析我的文章内容文件,并将其作为变量传递给我的“article.twig”。我写了一个简单的方法来描述它:实际上我使用了另一种方法:加载和解析我的文章内容文件,并将其作为变量传递给我的“article.twig”。我写了一个简单的食谱来描述它: