我有两个我自己创建的软件包:一个用于生成管理部分(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
模板中添加关于AdminBundle
的行。或许我在寻找“太多”?
答案 0 :(得分:3)
将custom Twig extenstion与测试功能一起使用,如下所示:
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
来制作loading application-wide:
{%- 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 -%}