2

私はembedFormを持つSymfonyFormを持っています。メインフォームが空であっても、埋め込みフォームを保存したい。ユーザーが 1 つの 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 を使用し、空のフィールドの穴の束を送信しないことです。
  • リクエストから embbedForm 情報を取得し、埋め込みフォームのインスタンスを作成し、リクエスト情報 (埋め込みフォームの 1 つだけ) をバインドするように、processForm (フォーム オブジェクトの保存を処理する一般的な管理ジェネレーター メソッド) アクションを変更する必要があります。検証が行われる可能性があります。有効な場合は保存します。

作成や更新などのアクションでアドミン ジェネレーター コード (キャッシュに格納されている) を確認すると、アイデアをもう少し視覚化するのに役立ちます。

于 2011-01-25T16:23:53.290 に答える