簡體   English   中英

Symfony 和 Twig:模板中的條件

[英]Symfony and Twig: conditions in templates

我自己創建了兩個包:一個用於生成管理部分 ( AdminBundle ),另一個用於創建賬單 ( BillingBundle )。 BillingBundle基本上有 2 個實體: ClientBill (1:m)。

如果我安裝這兩個包以在管理員處為ClientBill生成新的/編輯表單和列表,我會在config.yml包含一個部分,如下所示:

my_admin_bundle:
    entities: 
        project:  #whatever entity. Project at AppBundle for example
            new: true
            list: true
        client:
            new: true
            list: true
        bill:
            new: true
            list: true

另一方面,在AdminBundle我有一個名為form.html.twig的模板,它呈現表單以創建新元素。 基本上就是這樣:

{{ form(form) }}

疑問:由於創建新Bills的表單需要一個.js文件( accounting.js ),如何僅包含新Bill表單而不包含新ClientProject表單?

你可以想象,現在我在form.html.twig有這個:

{{ form(form) }}
<script src="/bundles/ziiwebbilling/js/accounting.js" type="text/javascript"></script>

但我不需要accounting.jsform.html.twig新的Projects ,或者新Clients的形式。

注意:對不起,如果我的解釋過多,但我不知道如何以另一種方式解釋它。 即使問題的標題很糟糕,如果您找到更好的東西,請編輯它。

編輯:正如我剛剛在 jkucharovic 的回答的第一條評論中所寫的那樣,我真正想要解決我的問題的是一種非侵入性的方式,即:我不想添加有關accounting.js的行accounting.jsAdminBundle模板。 或者也許我在尋找“太多”?

自定義 Twig 擴展與測試功能一起使用,如下所示:

public function getTests()
{
    return [
        new \Twig_SimpleTest('bill', function ($var) {
            return $var instanceof Bill;
        })
    ];
}

然后在模板中,您可以簡單地測試表單是否用於Bill實體:

{{ form(form) }}
{% if form.vars.value is bill %}
<script src="/bundles/ziiwebbilling/js/accounting.js"></script>
{% endif %}

編輯:如果您出於某種原因不想修改包內的模板,您可以通過定義自己的模板並覆蓋默認form block來在應用程序范圍內加載

{%- block form -%}
    {% if form.vars.value is bill %}
    <script src="/bundles/ziiwebbilling/js/accounting.js"></script>
    {% endif %}
    {{ form_start(form) }}
        {{- form_widget(form) -}}
    {{ form_end(form) }}
{%- endblock form -%}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM