繁体   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