You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:05:18