Symfony2如何在选择实体字段中设置选项值

时间:2014-06-17 12:51:01

标签: symfony

我想知道是否有办法在选择列表中设置选项的值。此选择是一个选择实体字段。

我的代码中一切正常。关键是我在视图中得到了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>

3 个答案:

答案 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(),
             ]
         )
    }

}

You can read about creating field types as a service

答案 1 :(得分:0)

如果我理解您的问题,您就会问如何在实体字段上设置首选项。

您可以查看以下答案:https://stackoverflow.com/a/12000289/3524372

答案 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的情况。