•  

㈱くじらシステム開発の社員が、日々のちょっとした出来事を書いてみました。
企業HPはこちらへ↓
くじらシステム開発ロゴ

symfony 1.2 embedFormで画像登録

  2009年11月28日(土) 17:08 JST  投稿者: 河口
 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からの処理の流れをみると、こちらが正しいと思うのでバグのような 気がするなぁ。
タグ: symfony php