Symfony 如何在form_小部件上使用两个属性

Symfony 如何在form_小部件上使用两个属性,symfony,doctrine-orm,Symfony,Doctrine Orm,我可以通过这个代码显示表单 $builder->add('icon', 'entity', array( 'class' => 'UserBundle:IconPics', 'property' => ‘label', 'expanded' => true, 'multiple' => false, )); 细枝 {{ form_label(form.icon) }} {{ form_widget(form.icon) }} 出现了标有“Pictu

我可以通过这个代码显示表单

$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文件的链接

如何通过一个form_小部件使用两个属性

我的代码如下

我有这样的桌子

在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

这可能不是最优雅的解决方案,但它是一个快速的解决方案。正确的解决方案可能是编写自定义字段类型,这将涉及编写大量代码

有一个简单的技巧可以实现你想要的。只需向实体添加一个方法,该方法将用于同时获取两个值:

public function getFormViewData()
{
    return $this->getLabel() . ';' . $this->getPicture();
}
然后在
属性
属性中使用此方法:

$builder->add('icon', 'entity', array(
     // ...
    'property' => 'formViewData',
));
最后,使用细枝分离模板中的两个值(参见示例),并调整模板(即通过覆盖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 }}

明白了吗?

所以基本上你的问题是。。。使用实体字段类型-如何向视图公开基础实体的第二个属性(由
属性指定的属性除外)?请尽量让你的问题简短一些,更一般一些,这样他们将来也可以帮助其他人:)是的,正如你所说,我想使用第二个属性,但我不知道如何才能做到,在twig或在builder->add中?我会改变标题,尽量保持简单。谢谢。请看我的答案-希望它能引导你进入正确的方向:)这是一个很好的提示,我想我能理解这个问题的基本方法。但是我使用的是form_小部件(form.icon)。这样,我想我必须访问form.icon的每个项目。我不知道如何访问每个项目…Thx nifr,我想我的一般问题“如何使用两个属性”已解决。我为另一个一般问题撰写了新文章。