我有一个父表单PageForm和一个嵌入表单ContentForm。 Page与Content有一对多的关系。在编辑PageForm时,我只嵌入了1个ContentForm - 这个工作正常。这是PageForm的配置方法
$content = new content();
$content->Page = $this->getObject();
if (sfContext::getInstance()->getActionName() == 'new')
{
$form = new contentForm($content);
} else
{
$form = new contentForm($this->getObject()->getPublishedVersion());
}
$this->embedForm('content', $form);
方法getPublishedVersion()
返回单个内容对象。
编辑和保存工作正常 - 保存父窗体也会将嵌入对象的更新执行到数据库中...
我的问题是我不想更新我想要创建新记录的现有记录并增加version_number列。我试过覆盖PageForm类的saveEmbeddedForms()
方法,但我发现它很难 - 有没有人有关于我如何做到这一点的任何例子或想法?
我试过这个 - >
if ($forms === null)
{
$forms = $this->embeddedForms;
}
$newForm = new contentForm($forms['content']);
$newForm->save();
return parent::saveEmbeddedForms($con, $forms);
但它抱怨contentForm()期望和对象......我如何从数组创建一个新对象?
答案 0 :(得分:2)
这就是我解决它的方法......
public function saveEmbeddedForms($con = null, $forms = null)
{
if ($forms === null)
{
$forms = $this->embeddedForms;
}
// create new object as copy
$newcontent = $forms['content']->getObject()->copy(false);
// unset the id
unset($newcontent->id);
// incerement version
$version = $newcontent->getVersion();
$newcontent->setVersion($version +1);
// save new record
$newcontent->save();
return; // dont save the current record
}