Twig是否具备与Blade的@push和@stack等效的功能?
Twig是否拥有与Laravel Blade的@push和@stack等效的功能?
Blade的@push和@stack功能本质是允许对区块进行多次追加操作,而非互相覆盖——每次调用@push都会向指定区块中添加内容,最终通过@stack输出所有追加的内容。举个Blade的示例:
父模板中定义stack的输出位置:
<head> <!-- 头部内容 --> @stack('myscripts') </head>
在其他模板片段中push内容:
@push('myscripts') <script src="/example11.js"></script> @endpush
@push('myscripts') <script src="/example22.js"></script> @endpush
最终生成的HTML如下:
<head> <!-- 头部内容 --> <script src="/example11.js"></script> <script src="/example22.js"></script> </head>
答案是肯定的,Twig拥有完全等效的功能,主要有两种实现方式:
1. 直接使用{% push %}和{% stack %}标签(Twig 2.x及以上版本)
这和Blade的用法几乎完全一致,是最直接的替代方案:
父模板中定义stack输出位置:
<head> <!-- 头部内容 --> {% stack 'myscripts' %} </head>
在任意模板片段中push内容:
{% push 'myscripts' %} <script src="/example11.js"></script> {% endpush %}
{% push 'myscripts' %} <script src="/example22.js"></script> {% endpush %}
最终生成的HTML和Blade示例的结果完全相同。
2. 使用block配合append/prepend修饰符(兼容所有Twig版本)
如果使用的是较旧的Twig版本,可以通过区块的append或prepend修饰符实现追加效果:
父模板中定义基础区块:
<head> {% block myscripts %}{% endblock %} </head>
在子模板中追加内容(无需手动调用parent()):
{% block myscripts append %} <script src="/example11.js"></script> {% endblock %}
{% block myscripts append %} <script src="/example22.js"></script> {% endblock %}
这种方式同样会将所有追加的内容合并输出,效果和push/stack一致。
内容的提问来源于stack exchange,提问作者Toskan
相关产品推荐
相关产品推荐

