我正在尝试让集合原型具有一组默认值而不是空值。理想情况下,我希望能够在模型类或表单定义类中的某处定义那些默认值,但我找不到在任何地方执行此操作的方法。
举个例子:
我为我的表单创建了一个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,
));
...
}
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
}
到目前为止,我能够提出的最好的内容显示在下面的视图文件中(显示的代码用于渲染集合原型):
...
<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>
...
protected $age = 10;
),或者在表单定义(AbstractType)类中定义一个默认/空值(例如array('empty_value'=&gt; new) DateTime()),但目前都不可能。总而言之,我的问题是:
如何在将新项目添加到表单“集合”(而不仅仅是获取空白)时,为客户端自动设置的模型类定义默认值。
有没有人知道这样做的好方法?
答案 0 :(得分:2)
在表单所用实体的构造函数中,您只需使用\ DateTime对象设置日期,如下所示:
class MyEntity {
private $myDate;
public function __construct() {
$this->myDate = new \DateTime('today');
}
}
您还可以使用\ 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
答案 1 :(得分:0)
可能是
$builder->setData(array('date_of_birth', new \DateTime(...)));
答案 2 :(得分:0)
使用Symfony&gt; 2.0时,这是不可能的。
Symfony 2.0从底层对象检索原型的值,因此在构造函数中设置它们也会更改原型中的值。但是,使用Symfony 2.1更改了此行为,删除了此功能,使我们无法为原型设置默认值:
我认为现在确实不可能为原型设置默认值。 --webmozart,Symfony合作者(https://github.com/symfony/symfony/issues/5087)
正在开发open bug,应该添加对data_prototype
选项的支持。使用此选项,可以提供数据以预填充原型。但是,这可能会在Symfony 2.7之后发布。