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

时间:2013-08-01 06:17:00

标签: php symfony symfony-forms symfony-2.3

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

修改 这似乎是一个常见问题,很多人都看过这篇文章How to set default value for form field in 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"
        ));
    }
}

0 个答案:

没有答案