Symfony2表单选择显示许多实体属性

时间:2013-07-03 08:17:07

标签: forms symfony doctrine-orm twig

我希望以特殊方式显示表单选项(单选按钮)。

简短说明:

我需要在选择小部件中显示实体的许多属性,而不仅仅是名称(_toString)和值(id)。

夸张的解释:

我不会浪费时间解释我的实体,因为它们工作正常,我对它们没有任何问题。

我有一个 SalonWeb实体,与相册实体 OneToOne关系。此外,相册实体 Foto Entity 具有 OneToMany关系,并包含$ fotos ArrayCollection和$ foto_principal属性,该属性链接$ foto_id。

因此,通过适当的学说查询,我可以访问以下内容:

$salon_web->getAlbum()->getFotoPrincipal();

或者,在TWIG:

salonWeb.album.fotoPrincipal

到目前为止,一切都是正确的。

我想将此照片(英文照片)显示为表单选择标签,因此我执行此代码(正在运行)

在表单构建器中:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('salones', 'entity', array(
            'class' => 'CommonBundle:SalonWeb',
            'required' => true,
            'expanded' => true,
            'query_builder' => function(EntityRepository $er)
                {
                    return $er->getQueryBuilderVisiblesContacto();
                },
            'property' => 'album.foto_principal'
        ))
    // More code...
}

......在TWIG模板中:

  <div>
      {{ form_errors(formulario.salones) }}
      {{ form_label(formulario.salones) }}
      {% for childSalon in formulario.salones %}
      <label><img src="/uploads/galeria/{{ childSalon.vars.label }}" alt="" />{{ form_widget(childSalon) }}</label>

      {% endfor %}
  </div>
  {{ form_widget(formulario) }}

直到这里,所有工作都很好。但问题是我只能在表单选项中显示单个属性(在本例中是SalonWeb实体的album.foto_principal属性)

我想展示这样的东西:

  <div>
      {{ form_errors(formulario.salones) }}
      {{ form_label(formulario.salones) }}
      {% for childSalon in formulario.salones %}
        <label><img src="/uploads/galeria/{{ childSalon.whatever.name }}" alt="" />{{ childSalon.whatever.address ~ ' ' ~ childSalon.whatever.anotherSalonWebProperty }}
        <div>{{ childSalon.whatever.theLastProperty }}</div>
        {{ form_widget(childSalon) }}</label>

      {% endfor %}
  </div>
  {{ form_widget(formulario) }}

1 个答案:

答案 0 :(得分:2)

最后,我找到了一种方法,受到这篇文章解决方案的启发:

Symfony 2 Create a entity form field with 2 properties

向我的SalonWeb实体添加方法:

    //...
    public function getFormChoiceImageAndLabelProperties()
    {
        return array(
            'image_src' => $this->getAlbum()->getFotoPrincipal(),
            'label' => $this->getDireccionParcial(),
            'another_property' => $this->getWhatever(),
        );
    }

更改我的表单构建器选择属性
'property' => 'album.foto_principal'

'property' => 'form_choice_image_and_label_properties'

......在TWIG模板中:

  <div>
      {{ form_errors(formulario.salones) }}
      {{ form_label(formulario.salones) }}
      {% for childSalon in formulario.salones %}
      <label>
        <img src="/uploads/galeria/{{ childSalon.vars.label['image_src'] }}" alt="{{ childSalon.vars.label['label'] }}" />
        <div>
          <span>{{ childSalon.vars.label['label'] }}</span>
        </div>
        <div>
          <span>{{ childSalon.vars.label['another_property'] }}</span>
        </div>
        {{ form_widget(childSalon) }}
      </label>

      {% endfor %}
  </div>
  {{ form_widget(formulario) }}
  {{ form_widget(formulario) }}