symfony 1.2 embedFormで画像登録

 symfony1.3/1.4のRC版がリリースされましたね。
今年度中に正式リリースとなるのでしょうか?

 新バージョンも試してみたいけど、まだまだ1.2が現役。
ということで、embedFormを使った際につまづいた部分を一つご紹介します。

 embedFormは、あるフォームに別のフォームを内包する処理ですが、内包したフォーム内では、
画像のアップロードが出来ません。

DBの更新はできるので、ファイルのアップロード部分が動作していない模様。
ソースを追っていくと以下の箇所が原因と判明

 ファイルのアップロードを行っている部分は、
sfFormDoctrine.class.phpの「saveFile($field, $filename = null, sfValidatedFile $file = null)」ファンクションです。
 ここの507行あたり、

protected function saveFile($field, $filename = null, sfValidatedFile $file = null)
{
   ~
    if (is_null($file))
    {
      // ここで、$fileがnullとなる
      $file = $this->getValue($field);
    }
  ~

$fileは、呼び出し側で指定されていないので必ずnullとなり、$this->getValue($field)が処理されますが、
embedFormされたフォームでは、form->bind()していないので$fileがnullとなり、この後の処理で
ファイルが保存されません。

で、どうしたかというと、呼び出し側のprocessUploadedFileをオーバーライドして対応しました。
対象Formクラスに、processUploadedFileファンクションをコピペし、以下の部分を修正。

 $this->saveFile($field, $filename)
   ↓
 $this->saveFile($field, $filename, $values[$field])

updateObjectからの処理の流れをみると、こちらが正しいと思うのでバグのような
気がするなぁ。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL