Symfony2的:在枝条访问实体字段与实体字段类型(Symfony2 : accessing en

2019-07-29 03:36发布

这里是我的FormType:

public function buildForm(FormBuilder $builder, array $options)
{
    $builder
        ->add('user', 'entity', array(
            'class'   => 'UserBundle:User',
            'expanded' => true,
            'property' => 'name',
        ));
}

是否有访问视图(小枝)用户域的方法吗?

我想这样做:

{% for u in form.user %}
    {{ form_widget(u) }}
    {{ form_label(u) }}
    {% if u.moneyLeft > 0 %}
    <span>{{ u.name }} : {{ u.moneyLeft }} €</span>
    {% endif %}
{% endfor %}

...其中moneyLeft名称 ,从用户实体领域。

Answer 1:

在Symfony的2.5 - 您可以通过使用孩子的指数值的每个选择访问数据做到这一点。

在表单生成器 - 如你所期望的:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    // Generate form
    $builder
        ->add('child', 'entity', array(
            'class'         => 'MyBundle:Child',
            'label'         => 'Children',
            'property'      => 'any_property_for_label',
            'expanded'      => true,
            'multiple'      => true
        ));
}

在树枝模板:

{{ form_start(form) }}
{% for child in form.child %}
    {% set index = child.vars.value %}{# get array index #}
    {% set entity = form.child.vars.choices[index].data %}{# get entity object #}
    <tr>
        <td>{{ form_widget(child) }}</td>{# render checkbox #}
        <td>{{ entity.name }}</td>
        <td>{{ entity.email }}</td>
        <td>{{ entity.otherProperty }}</td>
    </tr>
{% endfor %}
{{ form_end(form) }}


Answer 2:

到今天为止,你可以在主分支(和即将推出的2.1)以下内容:

{{ u.vars.data.name }}

u对于用户,它包含附着变量的列表的形式图。 该data变量包含的形式,通常是你的对象的标准化数据(除非你添加自定义模型变压器)。

在早期版本的Symfony的,你可以这样做:

{{ u.vars.value.name }}

value变量包含的形式,这也是你的对象的视图数据(除非添加了定制模型或视图变压器)。

如果您在Symfony的主人或> = 2.1的工作,我建议访问data ,而不是value



Answer 3:

这为我工作在Symfony的3.1无线电部件:

{% set entity = form.parent.vars.choices[form.vars.name].data %}


Answer 4:

2.6.7版本

类似于亚伦GEISER建议,您可以使用自定义表单控件来实现这一目标:

{# src/AppBundle/Resources/views/Form/fields.html.twig #}
{% extends 'form_div_layout.html.twig' %}

{%- block entity_widget -%}
    <div {{ block('widget_container_attributes') }}>
    {%- for n, child in form %}
        {{- form_widget(child, {
            'entity': form.vars.choices[n].data
        }) -}}
        {{- form_label(child) -}}
    {% endfor -%}
    </div>
{%- endblock %-}

{%- block radio_widget -%}
{# You now have access to entity #}
{%- endblock -%}


Answer 5:

更新伯恩哈德Schussek的回答为symfony1.2 2.8.4(甚至略低版):

{% for key,value in form.user %} {# key is the ID in the database table #}
    {{ form_widget(value, {'label':value.vars.label}) }}
    {{ form.user.vars.choices[key].data.moneyLeft }} {# this syntax is new #}
{% endfor %}


文章来源: Symfony2 : accessing entity fields in Twig with an entity field type