我想在布局中的样式和脚本块内注入新值,但来自嵌入块。
当然,它会抛出错误 在块之外调用“parent”是禁止的.。
有什么解决办法吗?
layout.html.twig:
<!DOCTYPE html>
<html>
<head>
{% block style %}
<link rel="stylesheet" href="foo.css">
{% endblock %}
</head>
<body>
{% block content "" %}
{% block scripts %}
<script src="foo.js"></script>
{% endblock %}
</body>
</html>
list.html.twig:
{% extends 'layout.html.twig' %}
{% block content %}
{% embed datatable.html.twig %}
{% block tbody %}
<tr>
<td>my awesome table</td>
</tr>
{% endblock %}
{% endembed %}
{% endblock %}
datatable.html.twig:
<table id="myDatatable">
<tbody>
{% block tbody "" %}
</tbody>
</table>
{% block styles %}
{{ parent() }}
<link rel="stylesheet" href="dataTables.css">
{% endblock %}
{% block scripts %}
{{ parent() }}
<script src="dataTables.js"></script>
{% endblock %}
(我不能/不会使用 scripts 和 styles 内的 list.html.twig 块。它们是数据表模板的一部分,在 list.html.twig。)。
遗憾的是我不能使用 use 因为这个函数不支持动态属性,只支持字符串。
来自文档:
由于 use 语句的解析与传递给模板的上下文无关,因此模板引用不能是表达式。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
正如评论中所述,包含/嵌入不能更改其包含器中的块。 也就是说,有一个可用的扩展可以解决您的问题。
这个
延迟的Twig扩展可以在这里找到基本上,节点推迟了所述块的执行。 通过这种方式,您可以创建一个变量来保存所有 javascript 链接并输出它们。这可以在高级示例中看到github。
感谢 Eugene Leonovich 制作此扩展