2012-02-24 84 views
3

我有一个非常简单的形式与来自教义模型的一些字段。Symfony窗​​体不尊重集默认值

$this->widgetSchema['fields'] = new sfWidgetFormDoctrineChoice(array(
    'model'   => 'FieldModel', 
    'expanded'  => true, 
    'multiple'  => true,)); 

$this->validatorSchema['fields'] = new sfValidatorDoctrineChoice(array(
    'model' => 'FieldModel', 
    'multiple' => true,)); 

这些字段以复选框的形式呈现,我能够检查并正确保存。这个'fields'字段被转换为json结构并以文本形式保存到数据库中。到现在为止还挺好。

注意:字段'fields'作为TEXT存储在数据库中,但用户应该能够从复选框列表中选择值。

当我想要默认选中某些复选框时出现问题。

我试图做的:

$this->setDefault('fields', array('key1','key2','key3')); 

其中“keyX”对应于数据库中的主键(字符串)字段的实际值。

如果我做了

$this->getDefault('fields'); 

我回去正是我把以前。

但是,symfony不会输出任何复选框。我甚至试图删除'扩展'和'多个'选项的选择部件,所以我得到一个简单的选择框,并提供只有一个值作为默认选定。

设置其他小部件(文本输入,选择等)的默认值。

Btw;场模型是国际化的。不知道这里是否重要,因为存储/检索工作如预期那样。

另外;该表单通过include_partial()方法呈现为另一个表单的一部分。这可以破坏什么吗?在“父”窗体类:

$this->embedRelation('TheRelationThatBugsMe'); 

然后在_form.php这个为“父”:

include_partial('the_relation_that_bugs_me/form', array('form' => $form['TheRelationThatBugsMe'])); 

没有人有一个想法,我可能出现了问题,或者至少可以给我一些指导,我应该从哪里开始挖掘?

[UPDATE]

如果创建的形式“fields2”的新字段(即不存在作为在数据库中的字段),并使用完全相同的代码来创建插件,验证器并设置默认值,那么默认值将被正确渲染。它如何不起作用设置映射到数据库中列的字段的默认值?

回答

3

如果您在updateDefaultFromObject被调用sfDoctrineForm之前调用setDefault,那么如果对象存在,则对象的值将覆盖表单默认值。 updateDefaultsFromObject包含相关的逻辑。稍后您必须致电setDefault,或者重写该方法。