【发布时间】:2011-09-21 16:58:21
【问题描述】:
我试图让集合原型具有一组默认值而不是空白值。理想情况下,我希望能够在模型类或表单定义类中的某处定义这些默认值,但我无法找到在任何地方执行此操作的方法。
举个例子:
我为我的表单创建了一个 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)类中(例如数组('empty_value' => new DateTime() ),但目前都不可能。
总之,我的问题是:
如何为模型类定义默认值,当向表单“集合”添加新项目时将在客户端自动设置(而不是仅仅获得空白)。
有谁知道这样做的好方法吗?
【问题讨论】:
-
$builder->add('items', CollectionType::class, array( 'entry_type' => ItemType::class, 'allow_add' => true, 'allow_delete' => true, 'prototype' => true, 'prototype_data' => new ItemData(), ))
标签: symfony