我需要加载一个页面,该页面将被“插入”到模板中——当我阅读它时,Volt 的模板继承应该可以解决问题,它确实......有点。如示例中所示,硬编码值可以正常工作 - 以下示例有效:
<!-- Template -->
<div id="site_content">
{% block test %}
{% endblock %}
</div>
以及继承模板的页面:
{% extends "../../templates/de/index.volt" %}
{% block test %}
{{ content() }} {# this is a registered volt function that outputs the generated content #}
{% endblock %}
但是,同一页面可能需要继承不同的模板,并且必须在运行时决定,因此模板的名称必须动态生成。我想到了两个选择:
- 将模板名称设置为变量并在扩展时使用它 - 这里的问题是我没有看到之后使用它的方法。那家伙似乎也遇到了同样的问题,但既没有关于如何做的答案,也没有确认根本不可能。
注册另一个函数以生成完整的字符串(例如 {% extends "../../templates/de/index.volt" %})然后编译它,例如
$compiler->addFunction('get_template', function ($resolvedArgs, $exprArgs) use ($volt) { return $volt->getCompiler() ->compileString('{% extends "../../templates/de /index.volt" %}'); });
然后在页面中使用该功能,例如
{{ get_template() }}
{% block test %}
{{ content() }}
{% endblock %}
但是,使用该方法不会解析页面内容(例如,未显示注册的 content() 函数返回的内容)。我也对其他解决方案持开放态度(对于性能问题,使用 Twig 而不是 Volt 只是最后的手段),关于我做错了什么的建议或关于该主题的有用文章的指针。提前致谢!