我有一个烦人的问题。我试图找出表单的哪些字段已更改,然后将其插入表中。我设法在 doUpdateObject 中进行了 var_dump,如下所示
public function doUpdateObject($values)
{
parent::doUpdateObject($values);
var_dump($this->getObject()->getModified(false));
var_dump($this->getObject()->getModified(true));
}
似乎 $this->getObject()->getModified 似乎可以通过将其设置为 true 或 false 来为我提供前后值。
我现在面临的问题是,在某种程度上,sfWidgetFormSelect 似乎将我的一个字段保存为字符串。在保存之前,完全相同的字段是一个 int。(我在之前和之后都通过 var_dump 得到了这个想法)。
以下是两个 var 转储的结果显示:
array(1) {["annoying_field"]=> int(3)} array(1) {["annoying_field"]=>string(1)"3"}
这似乎使教义认为这是一种修改,因此给出了误报。
在我的基本形式中,我有
under $this->getWidgets()
'annoying_field' => new sfWidgetFormInputText(),
under $this->setValidators
'annoying_field' => new sfValidatorInteger(array('required' => false)),
最后在我配置的 Form.class.php 中,我重新配置了文件:
$this->widgetSchema['annoying_field'] = new sfWidgetFormSelect(array('choices' => $statuses));
statuses 是一个包含 {""a", "b", "c", "d"} 等值的数组
我只想将状态索引存储在数据库中。
还有如何将更改插入另一个数据库表?假设我的日志表?
任何关于为什么会发生这种情况的想法和建议都值得赞赏,我一直在试图弄清楚并在谷歌上浏览各种关键字,但无济于事。
谢谢!
编辑:
好的,所以我在我的模式中创建了另一个字段,整数只是为了测试。我创建了一个条目,保存并编辑了它。
这次同样的事情发生了!