Подтвердить что ты не робот

Установка значений по умолчанию с использованием классов форм в Symfony 2

Я пытаюсь определить значение по умолчанию для текстового поля в Symfony 2.3. Форма используется как для создания, так и для обновления объекта. В режиме редактирования должно использоваться значение, заданное базой данных, а не по умолчанию (конечно).

Edit Это, по-видимому, обычная проблема, многие люди рассматривали этот пост Как установить значение по умолчанию для поля формы в Symfony2?

Однако ответы не удовлетворяют (для меня):

  • использование атрибута data является "неправильным", оно всегда будет использоваться не только тогда, когда элемент формы не имеет значения
  • с использованием атрибута data с использованием подхода if-then-else (в то время как синтаксис в ответе неверен). Я сомневаюсь, что так должно быть сделано в Symfony.
  • другое предложение - установить значения по умолчанию в модели типа "protected $foo = 'myValue". Это работает для некоторых типов полей (например, текстовых полей), но не для всех.
  • использование EventListeners может работать, но он так много работает, что он не может быть предназначен для этой основной задачи.
  • настройка его в шаблоне ветки не работает, если вы работаете с тегом form_widget, и вам нужно установить его несколько раз, если вы используете форму в разных шаблонах

Итак, я все еще ищу "идеальный" способ, то есть способ предоставления разработчикам Symfony (должен быть один, это такое основное требование).

Это то, что у меня есть до сих пор, но оно не работает (в форме не отображается значение по умолчанию). Это правильный подход?

// Acme\DemoBundle\Form\ProjectType.php
class ProjectType extends AbstractType
{

    public function __construct(array $options = array())
    {
        $resolver = new OptionsResolver();
        $this->setDefaultOptions($resolver);
        $this->options = $resolver->resolve($options);
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('color', 'text', array(
                "label" => "Color:"
            )
        );
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            "color" => "#0000FF"
        ));
    }
}
4b9b3361