我有一个非常简单的形式,其中有一些来自学说模型的字段。
$this->widgetSchema['fields'] = new sfWidgetFormDoctrineChoice(array(
'model' => 'FieldModel',
'expanded' => true,
'multiple' => true,));
$this->validatorSchema['fields'] = new sfValidatorDoctrineChoice(array(
'model' => 'FieldModel',
'multiple' => true,));
字段在表单中呈现为复选框,我可以正确检查和保存。这个'fields'-field被转换为json结构并作为文本保存到数据库中。到目前为止一切都很好。
注意:字段'fields'在数据库中存储为TEXT,但用户应该能够从复选框列表中选择值。
当我想要默认选中某些复选框时会出现问题。
我试着这样做:
$this->setDefault('fields', array('key1','key2','key3'));
其中'keyX'对应于数据库中Field的主键(字符串)的实际值。
如果我做了
$this->getDefault('fields');
我完全回复了之前的内容。
但是,symfony没有输出任何选中的复选框。我甚至试图删除choice-widget的'expanded'和'multiple'选项,所以我得到一个简单的SELECT框,并且只提供一个默认选择的值。
为其他小部件(文本输入,选择等)设置默认值。
顺便说一句;现场模型是i18n。不知道这是否重要,因为存储/检索都按预期工作。
也;表单通过include_partial()呈现为另一个表单的一部分。这可以破坏什么吗?在“父”表单类中:
$this->embedRelation('TheRelationThatBugsMe');
然后在_ parent.php中为'parent':
include_partial('the_relation_that_bugs_me/form', array('form' => $form['TheRelationThatBugsMe']));
有没有人知道我哪里可能出错了,或者至少可以给我一些关于我应该从哪里开始挖掘的指示?
[UPDATE]
如果我以'fields2'形式创建一个新字段(不存在于数据库中的字段中)并使用完全相同的代码来创建窗口小部件,验证器和设置默认值,那么默认值正确呈现。为什么设置映射到数据库中列的字段的默认值不起作用?
答案 0 :(得分:3)
如果您在setDefault
中调用updateDefaultFromObject
之前调用sfDoctrineForm
,则对象的值将覆盖表单默认值(如果对象存在)。 updateDefaultsFromObject
包含相关逻辑。您必须稍后致电setDefault
,或覆盖该方法。