[英]Symfony and Twig: conditions in templates
我自己創建了兩個包:一個用於生成管理部分 ( AdminBundle
),另一個用於創建賬單 ( BillingBundle
)。 BillingBundle
基本上有 2 個實體: Client
和Bill
(1:m)。
如果我安裝這兩個包以在管理員處為Client
和Bill
生成新的/編輯表單和列表,我會在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
表單而不包含新Client
或Project
表單?
你可以想象,現在我在form.html.twig
有這個:
{{ form(form) }}
<script src="/bundles/ziiwebbilling/js/accounting.js" type="text/javascript"></script>
但我不需要accounting.js
在form.html.twig
新的Projects
,或者新Clients
的形式。
注意:對不起,如果我的解釋過多,但我不知道如何以另一種方式解釋它。 即使問題的標題很糟糕,如果您找到更好的東西,請編輯它。
編輯:正如我剛剛在 jkucharovic 的回答的第一條評論中所寫的那樣,我真正想要解決我的問題的是一種非侵入性的方式,即:我不想添加有關accounting.js
的行accounting.js
內AdminBundle
模板。 或者也許我在尋找“太多”?
將自定義 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.