我对Symfony嵌入表单有疑问。基本上我有一个名为Media
的表格。 Media
字段将保存用户图像,产品图片等。
媒体计划:
Media:
actAs:
Timestampable: ~
columns:
entity:
type: string(60)
notnull: true
entity_id:
type: bigint(20)
notnull: true
file:
type: string(255)
notnull: true
在这里,
entity
=产品或用户或等entity_id
= product_id或user_id等所以,我想动态地改变实体值取决于我调用这些形式的位置。
$this->embedForm('media', new MediaForm());
所以,我想从这里改变字段值,或者如果有更好的方法,请给我建议。
答案 0 :(得分:1)
为了保存Media对象需要id,因此可以在保存“parent”对象后进行保存。我认为你最好的选择是saveEmbeddedFroms()
方法(以MediaForm嵌入的形式):
public function saveEmbeddedForms($con = null, $forms = null)
{
if (isset($this->embeddedForms['media']))
{
$mediaForm = $this->getEmbeddedForm('media');
if ($mediaForm instanceof MediaForm && $mediaForm instanceof sfFormDoctrine)
{
$mediaFrom
->getObject()
->set('entity', get_class($this->getObject()))
->set('entity_id', $this->getObject()->get('id'))
;
}
}
parent::saveEmbeddedForms($con, $forms);
}
实际上你也可以将它放入BaseFormDoctrine
类,因此每个具有嵌入式MediaForm的学说形式都将被正确保存。
public function saveEmbeddedForms($con = null, $forms = null)
{
if (null === $con)
{
$con = $this->getConnection();
}
if (null === $forms)
{
$forms = $this->embeddedForms;
}
foreach ($forms as $form)
{
if ($form instanceof sfFormObject)
{
$form->getObject()->set('entity', get_class($this->getObject()))->set('entity_id', $this->getObject()->get('id'));
}
}
return parent::saveEmbeddedForms($con, $forms);
}