2

我有一个带有 embedForm 的 SymfonyForm。即使主表单为空,我也想保存 embedForm 如果已填写。这样用户就可以为一个 foo 对象上传任意数量的照片。但我不知道如何强制 symfony 保存 embedForm?!

架构

Foo:
 columns:
 title: {type: string(255), notnull: true}

Photo:
 columns:
  foo_id: {type: integer}
  filename: {type: string(255), notnull: true}
  caption: {type: string(255), notnull: true}
 relations:
  Foo:
   alias: Foo
   foreignType: many
   foreignAlias: Photos
   onDelete: cascade

FooPhotoForm:

$photo = new Photo();
$photo->Foo = $this->getObject();
$photoForm = new PhotoForm($photo);
$this->embedForm('newPhoto', $photoForm);

照片形式:

$this->useFields(array('filename', 'caption',));
$this->validatorSchema['filename'] = new sfvalidatorFile(...);

行动:

 protected function processForm(sfWebRequest $request, sfForm $form)
    {
 $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
 if ($form->isValid())
 {
     $cms = $form->save();

 }
 else
 {
     if(caption and filename not empty)
     {
  $form->saveEmbeddedForms();
     }
     else
     {
  $this->getUser()->setFlash('error', 'The item has not been saved due to some errors.', false);
     }
 }
4

1 回答 1

1

在我看来,强制就像您试图侵入正常执行以使事情正常进行,我真的不建议您这样做,但这里有一些选项:

  • 我解决这个问题的第一种方法是使用一些 ajax 来允许用户保存特定的部分,而不是发送一堆空字段。
  • 您应该修改您的 processForm(负责保存表单对象的通用管理生成器方法)操作以从请求中检索 embbedForm 信息,创建嵌入表单的实例并绑定请求信息(仅一个嵌入表单)所以可以进行验证。如果它有效,则保存它。

在创建或更新等操作中检查管理员生成器代码(存储在缓存中),它可以帮助您更直观地了解这个想法。

于 2011-01-25T16:23:53.290 回答