UbuntuでSymfony1.3.2を使用していますが、いくつかのウィジェットを含むフォームがあります。1つのウィジェットはsfWidgetFormInputFileで、これによりユーザーは画像を選択できます。
フォームが有効でない場合は、誤ったフィールドを修正するために、フォームをユーザーに再度提示します。
私が経験している問題は、現在、foemが(何らかの理由で)検証に失敗すると、ユーザーが指定した画像ファイルが失われることです(つまり、ユーザーはファイルを再度選択する必要があります)。
選択した画像ファイルをそのままにして(ユーザーがファイルを再度選択する必要がないように)、フォームをユーザーに再度表示するにはどうすればよいですか?
POSTされたフォームを処理するアクションでは、getFiles($ key)を呼び出し、取得した配列にインデックスを付けてファイル情報を取得し、ウィジェットのデフォルト値を設定します(以下を参照)。ただし、レンダリングされたウィジェットは空です(以前に選択したファイルへのパス名の値は保持されません。
私の(アクション)コードのスニペットは次のようになります。
$files = $request->getFiles('foobar');
if(!empty($files) && isset($files['pict_path'])){
$pic_info = $files['pict_path'];
$originalName =$pic_info['name'];
$type = $pic_info['type'];
$tempName = $pic_info['tmp_name'];
$size = $pic_info['size'];
$pict_file = new sfValidatedFile($originalName, $type, $tempName, $size);
$this->form->setWidget('pict_path', new sfWidgetFormInputFile(array('default'=>$pict_file)));
}
上記の望ましい動作を正しく実装する方法を誰かが提案できますか?