动态更改嵌入表单字段值 - Symfony 1.4

时间:2012-11-02 10:01:45

标签: symfony1 symfony-1.4

我对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());

所以,我想从这里改变字段值,或者如果有更好的方法,请给我建议。

1 个答案:

答案 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的学说形式都将被正确保存。

编辑:最后 sfFormObject 为我工作

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);
}