0

このコードでフォームを表示できます。

$builder->add('icon', 'entity', array(
'class' => 'UserBundle:IconPics',   
'property' => ‘label', 'expanded' => true,    'multiple' => false, 
));

小枝で

{{ form_label(form.icon) }}
{{ form_widget(form.icon) }}

「PictureA」、「PictureB」、「PictureC」...というラベルの付いたラジオボタンが表示されます。

しかし、「label」プロパティだけでなく、「pic」エンティティも使用して jpg ファイルへのリンクを作成したいと考えています。

1 つの form_widget で 2 つのプロパティを使用するにはどうすればよいですか?

私のコードは以下です。

次のようなテーブルがあります

User.php で

  /** 
 * @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\IconPics", inversedBy="icon") 
 * @ORM\JoinColumn(name="icon", referencedColumnName="id",nullable=true) 
 */
private $icon;

Icon.php で

/**
 * @var string
 *
 * @ORM\Column(type="string")
 */

private $label;

/**
 * @var string
 *
 * @ORM\Column(type="string")
 */
private $pic;

/** * * @ORM\OneToOne(targetEntity="Acme\UserBundle\Entity\User", inversedBy="icon") 
* @ORM\JoinColumn(name="icon", referencedColumnName="id") 
*/
private $icon;

アイコンテーブルは

|id |pic     |label
|1  |aaa.png |pictureA
|2  |bbb.png |pictureB
|3  |ccc.png |PictureC
4

1 に答える 1

2

これは最も洗練されたソリューションではないかもしれませんが、手っ取り早い方法です。適切な解決策は、多くのコードを記述する必要があるカスタム フィールド タイプを記述することでしょう。

あなたが望むものを達成するための簡単なトリックがあります。両方の値を一度に取得するために使用されるメソッドをエンティティに追加するだけです。

public function getFormViewData()
{
    return $this->getLabel() . ';' . $this->getPicture();
}

property次に、属性でこのメソッドを使用します。

$builder->add('icon', 'entity', array(
     // ...
    'property' => 'formViewData',
));

最後に、twig分割フィルターを使用して、テンプレートで 2 つの値を分離して取得し (例を参照)、元の値の代わりにこれらを使用するようにテンプレートを調整します (つまり、 form_label ウィジェットをオーバーライドします)。

 {# 
    inside the overriden widget set the label correctly before rendering it 
    and extract the picture url.
 #}

 {% set label = label|split(';')|first|trans %}
 {% set picture = label|split(';')|last %}

 {{ label }}
 {{ picture }}

アイデアはありますか?

于 2013-10-26T15:45:03.853 に答える