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

Symfony1 动态更改嵌入表单字段值-Symfony 1.4,symfony1,symfony-1.4,Symfony1,Symfony 1.4,我有一个关于Symfony嵌入表单的问题。基本上我有一个叫做媒体的表单媒体字段将保存用户图像、产品图像等 媒体计划: Media: actAs: Timestampable: ~ columns: entity: type: string(60) notnull: true entity_id: type: bigint(20) notnull: true file: type: stri

我有一个关于Symfony嵌入表单的问题。基本上我有一个叫做
媒体的表单<代码>媒体
字段将保存用户图像、产品图像等

媒体计划:

Media:
  actAs:
    Timestampable: ~    
  columns:
    entity:
      type: string(60)
      notnull: true
    entity_id:
      type: bigint(20)
      notnull: true
    file:
      type: string(255)
      notnull: true 
这里,

  • 实体
    =产品或用户等
  • 实体id
    =产品id或用户id等
所以,我想根据调用这些表单的位置动态更改实体值

 $this->embedForm('media', new MediaForm());

因此,我想从这里更改字段值,或者如果有更好的方法,请通知我。

为了保存媒体对象,需要一个id,因此可以在保存“父”对象后进行保存。我认为您最好的选择是
saveEmbeddedFroms()
方法(以嵌入MediaForm的形式):

实际上,您也可以将其放入
BaseFormDoctrine
类中,这样每个具有嵌入式MediaForm的doctrine表单都将正确保存

编辑:终于sfFormObject适合我了
为了保存媒体对象,需要一个id,因此可以在保存“父”对象后进行保存。我认为您最好的选择是
saveEmbeddedFroms()
方法(以嵌入MediaForm的形式):

实际上,您也可以将其放入
BaseFormDoctrine
类中,这样每个具有嵌入式MediaForm的doctrine表单都将正确保存

编辑:终于sfFormObject适合我了
是否要在提交表单后或表单提交给用户进行创建/修改时更改嵌入表单字段的值?@pankar:是的,正确无误,我要在提交表单后更改嵌入表单字段。因为不止我会得到实体id,比如(用户id、产品id)。我认为您应该覆盖
doSave()
(您需要从父级复制代码)或
saveEmbeddedForms()
(不需要复制)父窗体的方法。@1ed:您能给我一个示例代码或psudo代码作为答案吗。是否要在提交窗体后或在将窗体提交给用户进行创建/修改时更改嵌入窗体字段的值?@pankar:是的,您的正确答案是我要在提交窗体后更改嵌入窗体的字段。因为不止我会得到实体id,比如(用户id、产品id)。我认为您应该覆盖
doSave()
(您需要从父级复制代码)或
saveEmbeddedForms()
(不需要复制)父窗体的方法。@1ed:您能给我一个示例代码或psudo代码作为答案吗?我得到的错误是$mediaFrom->getObject()行中未定义$mediaFrom。你有什么线索吗。请帮助我在configure方法中嵌入meda表单(
$this->embedForm('media',new MediaForm());
)。我不知道它怎么可能是未定义的,因为有一个
isset($this->embeddedForms['media')
调用来检查它是否已定义。嵌入的
MediaForm
应该是条令形式的后代(
sffromtority
或实际上是条令生成的
BaseMediaFrom
)。我已经更新了我的答案以检查这一点。@led:我仍然得到未定义的错误。当我返回echo getEmbeddedForm输出时,它只是返回完整的媒体形式,而不是对象。所以我想这可能是问题所在。我在$mediaFrom->getObject()行上得到了一个错误,比如$mediaFrom未定义。你有什么线索吗。请帮助我在configure方法中嵌入meda表单(
$this->embedForm('media',new MediaForm());
)。我不知道它怎么可能是未定义的,因为有一个
isset($this->embeddedForms['media')
调用来检查它是否已定义。嵌入的
MediaForm
应该是条令形式的后代(
sffromtority
或实际上是条令生成的
BaseMediaFrom
)。我已经更新了我的答案以检查这一点。@led:我仍然得到未定义的错误。当我返回echo getEmbeddedForm输出时,它只是返回完整的媒体形式,而不是对象。所以我想可能有问题。
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);
}
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);
}