我正在尝试为 Symfony 2.3 中的文本字段定义默认值。该表单用于创建和更新实体。在编辑模式下,应该使用数据库给出的值,而不是默认值(当然)。
编辑 这似乎是一个常见问题,很多人都查看了这篇文章如何在 Symfony2 中设置表单字段的默认值?
然而,答案并不令人满意(对我来说):
- 使用 data 属性是“错误的”,它总是会被使用,不仅仅是当表单元素没有值的时候
- 使用 if - then - else 方法使用 data 属性有效(而答案中的语法是错误的)。我怀疑这是否应该在 Symfony 中完成。
- 另一个建议是在模型中设置默认值,例如“protected $foo = 'myValue'”。这适用于某些字段类型(例如文本字段),但不是全部。
- 使用 EventListeners 可能会起作用,但工作量太大,它不能成为这个基本任务的预期方式
- 如果您使用 form_widget 标记,则在 twig 模板中设置它不起作用,如果您在不同模板中使用表单,则必须多次设置它
所以我还在寻找“完美”的方式,即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"
));
}
}