23

我正在尝试为 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"
        ));
    }
}
4

0 回答 0