Symfony2 - Form Collection原型中的默认值

age*_*tar 8 symfony

我试图让集合原型具有一组默认值而不是空值.理想情况下,我希望能够在模型类或表单定义类中的某处定义那些默认值,但我找不到在任何地方执行此操作的方法.

举个例子:

我为我的表单创建了一个AbstractType,它包含一个嵌套的Person行集合(相关代码如下所示):

public function buildForm(FormBuilder $builder, array $options)
{
    ...
    $builder->add('people', 'collection', array(
            'type'         => new PersonType(),
            'allow_add'    => true,
            'allow_delete' => true,
            'prototype'    => true,
        ));
    ...
}
Run Code Online (Sandbox Code Playgroud)

PersonType类包含以下代码:

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('name', 'text');
    $builder->add('date_of_birth', 'date');
    $builder->add('age', 'number');

    // This would be great if I could do this but I can't:
    //$builder->add('date_of_birth', 'date', array('empty_value' => new \DateTime(...))); // some default value defined here
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我能够提出的最好的内容显示在下面的视图文件中(显示的代码用于呈现集合原型):

...
<tr>
    <td> {{ form_widget(person.name) }} </td>

    {# THIS DOES NOT WORK (I just get the default selected date) #}
    <td> {{ form_widget(person.date_of_birth, {'value': person.date_of_birth.get('value')|default({'year':2010, 'month':10, 'day':15})} }} </td>

    {# THIS WORKS (the field contains '0' instead of being empty) #}
    <td> {{ form_widget(person.age, {'value': person.age.get('value')|default(0)} }} </td>
</tr>
...
Run Code Online (Sandbox Code Playgroud)
  • 它似乎只适用于文本和数字等简单类型.它不适用于日期类型.
  • 无论如何,这感觉不是正确的方法.我应该能够在底层模型中定义默认/空值(例如protected $age = 10;在模型类内),或者在表单定义(AbstractType)类中定义(例如array('empty_value'=> new DateTime()),但是目前都不可能.

总而言之,我的问题是:

如何在将新项添加到表单"集合"(而不是仅获取空白)时,为客户端上自动设置的模型类定义默认值.

有谁知道这样做的好方法?

kda*_*zle 2

在使用表单的实体的构造函数中,您只需使用 \DateTime 对象设置日期,如下所示:

class MyEntity {
    private $myDate;

    public function __construct() {
        $this->myDate = new \DateTime('today'); 
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用 \DateTime('now') 或 \DateTime('tomorrow'),如下面的讨论中所述

http://groups.google.com/group/symfony2/browse_thread/thread/18a5b20aca485dc4/e9947d0f06d6519d

编辑:实际上,此信息位于 symfony2 文档中:

http://symfony.com/doc/2.0/book/forms.html#building-the-form