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
この投稿へのコメント