Форма 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 для этого.

Другие вопросы по тегам