使用Symfony 2中的表单类设置默认值

her*_*h42 24 php symfony-forms symfony symfony-2.3

我试图在Symfony 2.3中为文本字段定义默认值.该表单用于创建和更新实体.在编辑模式下,应使用数据库给出的值,而不是默认值(当然).

编辑 这似乎是一个常见问题,很多人看过这篇文章如何在Symfony2中设置表单字段的默认值?

然而答案并不令人满意(对我来说):

  • 使用data属性是"错误的",它将始终被使用,不仅在表单元素没有值时
  • 使用if - then - else方法使用data属性(虽然答案中的语法是错误的).我怀疑这是应该在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"
        ));
    }
}
Run Code Online (Sandbox Code Playgroud)