Форма Symfony, сущность и ограничение выбора
У меня есть сущность 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 %}
Итак, теперь у нас есть третье место, где дублируются не только значения, но и метки. Я думал о чем-то вроде сервиса, который служит расширением ветки и может быть внедрен в конструктор форм, но он не решает дублирование с ограничением. Теперь я понятия не имею, как ее решить, мне бы очень хотелось, чтобы у меня было только одно место, где я определяю подобные вещи, и больше всего я бы хотел, чтобы они оставались внутри сущности в виде аннотаций, но я не знаю, как поступить с этим.
Есть идеи?
1 ответ
Вместо того, чтобы жестко задавать варианты выбора в вашем отображении, вы должны предоставить им возможность вызова. Вы можете использовать мой пакет enum для этого.