Twig:在表单窗口小部件自定义中从外部作用域访问变量

时间:2013-07-05 16:08:23

标签: scope block twig symfony-2.3

我正在尝试自定义特定的小部件,例如文档:http://symfony.com/doc/current/cookbook/form/form_customization.html#how-to-customize-an-individual-field

问题是在这个自定义块中,我需要使用实际模板中的变量。我认为“块可以访问外部作用域的变量”,但显然不是这种情况:

{% extends "CDASvBundle::layout.html.twig" %}
{% block _contact_activity1_widget %}
<select name="contact[activity1]">
    {% for key, child_contact_categories in contact_categories_tab %}
    <option value="{{key}}">{{child_contact_categories}}</option>
    {% endfor %}
</select>

这是说contact_categories_tab未定义,但在此块之外(例如,在正常content块中),它可以正常工作!

我尝试过类似的事情:

{% use 'form_div_layout.html.twig' with contact_categories_tab as contact_categories_tab %}

但那也不是......虽然我不确定我是否必须使用use以及如何使用!

我看到另一个我尚未尝试过的解决方案:将此自定义放在另一个模板中。但我真的不想那样做(新模板中的几行),应该有一种方法只在 ONE模板中做到这一点?!

1 个答案:

答案 0 :(得分:1)

最后在上一篇文章中找到答案:

  

每个symfony表单类型扩展AbstractType类。

     

AbstactType类有方法:

public function buildView(FormView $view, FormInterface $form, array $options)
{
    $view->set('img_src', '120x100.jpg');
    $view->set('my_variable', $foo);

}
     

您可以在表单类型上创建此方法,然后在树枝中创建此方法:

{{ asset(img_src) }}

来源:How to get entity or pass variable to Symfony2 twig form widget?