Symfony形式&实体,选择约束混淆


Symfony form & entity & choice constraint confusion

我有一个带有选择字段的Doctrine实体,它看起来是这样的

/**
 * @var string
 * @ORM'Column(name="color", type="string", nullable=false)
 * @Assert'Choice(choices = {"red", "green", "blue"}, message="Choose valid color")
 */
 protected $color;

现在我已经有了一个与我的实体相关联的表单,假设这个特定的字段是这样的

$builder->add(
    'color',
    'choice',
    array(
        'choices'  => array(
            'red'   => 'Red like roses',
            'green' => 'Green like grass',
            'blue'  => 'Blue like sky'
        ),
        'expanded' => true
    )
);

就我现在而言,很明显可能的值在约束内部和表单内部是重复的。但是让我们更进一步,我想在模板中显示我的实体,所以我必须这样做:

{% if entity.color == 'red' %}
Red like roses
{% elseif entity.color == 'green' %}
Green like grass
{% elseif entity.color == 'blue' %}
Blue like sky
{% endif %}

所以我们现在有了第三个地方,不仅值,而且标签都是重复的。我想到了一个服务,作为一个小枝扩展,可以注入到表单构建器,但它不解决重复与约束。现在我不知道如何解决它,我只希望有一个地方我定义那样的东西最重要的是,我希望把它们作为注释保存在实体内部但我不知道如何继续这个。

任何想法?

您应该为它们提供一个可调用对象,而不是硬编码映射中的选择。你可以使用我的enum包