|
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 |

