Я пытаюсь определить значение по умолчанию для текстового поля в 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"
));
}
}