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'的单选按钮......

但我不仅想使用“标签”属性,还想使用“图片”实体来链接到 jpg 文件。

如何通过一个 form_widget 使用两个属性?

我的代码如下。

我有表如

在用户.php

  /** 
 * @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\IconPics", inversedBy="icon") 
 * @ORM\JoinColumn(name="icon", referencedColumnName="id",nullable=true) 
 */
private $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 split 过滤器分离获取模板中的两个值(参见示例)并调整模板(即通过覆盖 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 回答