【问题标题】:Symfony form not honoring set defaultsSymfony 表单不遵守设置的默认值
【发布时间】:2012-03-14 20:16:39
【问题描述】:

我有一个非常简单的表单,其中包含一些来自学说模型的字段。

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

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

这些字段在表单中呈现为复选框,我能够正确检查和保存。这个“字段”字段被转换为 json 结构并作为文本保存到数据库中。到目前为止一切顺利。

注意:字段“字段”在数据库中存储为文本,但用户应该能够从复选框列表中选择值。

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

我尝试过:

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

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

如果我这样做

$this->getDefault('fields');

我完全恢复了我之前输入的内容。

然而,symfony 没有输出任何选中的复选框。我什至尝试删除选择小部件的“扩展”和“多个”选项,因此我得到一个简单的 SELECT 框,并且只提供一个默认值。

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

顺便说一句;场模型是 i18n。不知道这在这里是否重要,因为存储/检索都按预期工作。

还有;通过 include_partial() 将表单呈现为另一个表单的一部分。这能破坏什么吗?在“父”表单类中:

$this->embedRelation('TheRelationThatBugsMe');

然后在 _form.php 中为'父':

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

有没有人知道我可能在哪里出错了,或者至少可以给我一些关于我应该从哪里开始挖掘的指示?

[更新]

如果我以“fields2”形式创建一个新字段(该字段在数据库中不作为字段存在)并使用完全相同的代码来创建小部件、验证器并设置默认值,那么默认值正确呈现。为什么为映射到数据库中列的字段设置默认值不起作用?

【问题讨论】:

    标签: php symfony1 doctrine symfony-1.4


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2018-03-28
      相关资源
      最近更新 更多