强制Symfony保存embedForm

时间:2011-01-25 11:07:49

标签: php symfony1 symfony-forms

我有一个包含embedForm的SymfonyForm。即使主Form为空,我想保存embedForm。这样用户就可以根据需要为一个foo objekt上传尽可能多的照片。但我不知道如何强制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);

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

1 个答案:

答案 0 :(得分:1)

强迫我觉得你正试图破解正常的执行以使事情有效,我真的不建议你去做,但这里有一些选择:

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

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