2016-05-09 81 views
-2

我有两个我自己创建的包:一个用于生成管理部分(AdminBundle),另一个用于创建帐单(BillingBundle)。 BillingBundle基本上有2个实体:ClientBill(1:m)。Symfony和Twig:模板条件

如果我安装这两个捆绑在管理员生成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.twigProjects,或者新的Clients形式。

备注:对不起,如果我用我的解释延长了太多,但我不知道如何用另一种方式解释它。即使问题的标题也很糟糕,如果你发现更好的东西,请编辑它。

编辑:因为我刚刚在对jkucharovic的回答第一个评论中写道,我真正在寻找解决我的问题,是一个非侵入性的方式,那就是:我不会喜欢在AdminBundle模板中添加关于accounting.js的行。或者我可能在寻找“太多”?

+0

为什么你只是不把附加变量传递给控制器​​的模板,并在树枝中定义'语句。 – malcolm

+0

@malcolm但控制器也是一样的。只有一个控制器。 – ziiweb

+0

而你无法在该控制器的类实例中识别哪种形式被渲染? – malcolm

回答

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

来制作
{%- 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 -%} 
+0

谢谢,我仍然不知道枝条延伸应该如何,以及为什么我需要obbligatory测试功能。也许你可以帮助我多一点。另一方面,我真正想要的是一种非侵入性的方式,那就是:我不想在“AdminBundle”模板中添加有关accounting.js的行。对不起,如果我期待太多..:/ – ziiweb

+0

@ziiweb看到更新的答案。 – jkucharovic

相关问题