我想知道是否有办法在选择列表中设置选项的值。此选择是一个选择实体字段。
我的代码中一切正常。关键是我在视图中得到了value选项中每个字段的ID,我需要在那里有另一个字段。
我使用option属性来设置选项名称中显示的内容,但我还需要设置值字段中显示的内容。
到目前为止,我没有成功找到解决方案,所以如果有人能帮助我,我们将非常感激。
表单类型中我的字段的一小部分。
->add('fieldName','entity', array(
'class' => 'path\to\entity',
'property' => 'name',
'multiple' => true,
'expanded' => false,
)
感谢。
我返回的HTML代码如下所示
<select>
<option value="4">ROLE_EXAMPLE</option>
</select>
我想做的就是得到这样的结果:
<select>
<option value="specific_property_from_entity">ROLE_EXAMPLE</option>
</select>
答案 0 :(得分:4)
您可以使用choice
类型代替entity
,这是一些示例:
class YourType extends AbstractType
{
protected $em;
// Injecting EntityManager into YourType
public function __construct(EntityManager $em)
{
$this->em = $em;
}
private function getChoices()
{
// some logic here using $this->em
// it should return key-value array, example:
return [
'foo' => 'bar',
'test' => 'abc', // and so on...
];
}
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('fieldName', 'choice', [
'choices' => $this->getChoices(),
]
)
}
}
答案 1 :(得分:0)
如果我理解您的问题,您就会问如何在实体字段上设置首选项。
答案 2 :(得分:0)
您可以传递 choice_value 选项,该选项使用callable或属性路径(getProperty())来填充您的选择值
->add('fieldName','entity', array(
'class' => 'path\to\entity',
'property' => 'name',
'multiple' => true,
'expanded' => false,
'choice_value => 'Property'
)
如果您使用callable来填充choice_value,则需要检查字段值可能为null的情况。