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

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

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

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

  • использование атрибута данных «неправильно», он будет использоваться всегда, а не только тогда, когда элемент формы не имеет значения
  • использование атрибута данных с использованием подхода if-then-else работает (при этом синтаксис в ответе неверен). Я сомневаюсь, что это так, как это должно быть сделано в Symfony.
  • другое предложение - установить значения по умолчанию в модели, такие как «защищенный $ 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"
        ));
    }
}

person herrjeh42    schedule 01.08.2013    source источник