0

フォームの選択肢 (ラジオ ボタン) を特別な方法で表示したい。

簡単な説明:

名前 (_toString) と値 (id) だけでなく、選択ウィジェットでエンティティから多くのプロパティを表示する必要があります。

拡張説明:

エンティティは正常に機能し、問題はありません。

Album EntityOneToOne 関係にあるSalonWeb Entityがあります。また、Album エンティティFoto エンティティとOneToMany 関係を持ち、$fotos ArrayCollection と、$foto_id をリンクする $foto_principal プロパティを含みます。

したがって、適切な教義クエリを使用すると、次のようなものにアクセスできます。

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

または、小枝で:

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) }}

ここまではすべて正常に動作しています。しかし、問題は、フォームの選択で1 つのプロパティしか表示できないことです(この場合は、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) }}
4

1 に答える 1

2

最後に、この投稿の解決策に触発されて、それを行う方法を見つけました。

Symfony 2 2 つのプロパティを持つエンティティ フォーム フィールドを作成する

私の 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) }}
于 2013-07-03T08:59:42.293 に答える