Symfony表单主题块覆盖中不存在变量

Symfony表单主题块覆盖中不存在变量,symfony,twig,Symfony,Twig,我正在构建一个表单,其中包含一系列用于搜索某些内容的类别,这些类别定义为我的Symfony FormType中的ChoiceType 我将类别列表以及一些其他数据(每个类别计数)(在我的控制器中定义为变量“aggs”)传递到一个细枝模板中,并创建一个表单主题,覆盖“我的类别”下拉列表的“选项”框,以便我可以在渲染时显示额外的数据,因此: {% form_theme form.categories _self %} {% block choice_widget_options %} {%

我正在构建一个表单,其中包含一系列用于搜索某些内容的类别,这些类别定义为我的Symfony FormType中的ChoiceType

我将类别列表以及一些其他数据(每个类别计数)(在我的控制器中定义为变量“aggs”)传递到一个细枝模板中,并创建一个表单主题,覆盖“我的类别”下拉列表的“选项”框,以便我可以在渲染时显示额外的数据,因此:

{% form_theme form.categories _self %}
{% block choice_widget_options %}
    {% if choices is defined %}
        {% for choice in choices %}
            <option value="{{ choice.value }}">{{ choice.label }} {{ aggs }}</option>
        {% endfor %}
    {% endif %}
{% endblock choice_widget_options %}
{%form\u theme form.categories\u self%}
{%block choice_widget_options%}
{%如果定义了选项%}
{choices%%中的选项为%s}
{{choice.label}{{aggs}
{%endfor%}
{%endif%}
{%endblock choice_widget_options%}
为什么我的块不能访问控制器中定义的顶级变量?它可以看到“app”全局变量,但不能看到控制器定义的变量


谢谢

更优雅的解决方案是重写AbstractType类的buildView方法

只需添加:

$view->vars[‘aggs’] = YOUR AGGS VAR;
在您的表格中使用它作为:

<option value="{{ choice.value }}">{{ choice.label }} {{ form.vars.aggs }}</option>
{{choice.label}{{form.vars.aggs}

基本上,将变量传递给表单,然后在twig中使用它。将其传递给表单类型的方式由您决定。它可以是依赖项注入,也可以通过控制器的表单选项。

更优雅的解决方案是重写AbstractType类的buildView方法

只需添加:

$view->vars[‘aggs’] = YOUR AGGS VAR;
在您的表格中使用它作为:

<option value="{{ choice.value }}">{{ choice.label }} {{ form.vars.aggs }}</option>
{{choice.label}{{form.vars.aggs}

基本上,将变量传递给表单,然后在twig中使用它。将其传递给表单类型的方式由您决定。它可以是依赖项注入,也可以通过控制器的表单选项来实现。

事实证明,我可以在我的控制器中实现这一点:“$this->get('twig')->addGlobal('aggs','somevalue')”但是这感觉很不雅观,我想理解为什么我不能直接访问它。是不是你把表单渲染放在了宏中?结果我可以在我的控制器中这样做:“$this->get('twig')->addGlobal('aggs','somevalue')”但是这感觉很不雅观,我想理解为什么我不能直接访问它。是不是你把表单渲染放在了宏中?