我有一个带有选择字段的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包