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