我在前端有一个文件上传表单。
目前,创建新记录时,文件将上传到
%sf_data_dir%/files/
但由于某些业务逻辑,我需要将文件上传到
%sf_data_dir%/files/%record_id%/
因此,在创建记录后,应保存上传的文件。
我怎样才能做到这一点?
答案 0 :(得分:2)
如果您使用文件上传,您的表单肯定会使用sfValidatorFile(如果没有,那就错了):
$this->validatorSchema['image'] = new sfValidatorFile(array(
'required' => true,
'mime_types' => 'web_images',
));
这个验证器返回一个sfValidatedFile实例,可以保存在任何你想要的地方(它比move_uploaded_file更安全,对目录,文件名进行检查......)。
在您的操作中(或在表单中,根据需要/需要),您现在可以执行此操作:
protected function processForm(sfWebRequest $request, sfForm $form)
{
$form->bind(
$request->getParameter($form->getName()),
$request->getFiles($form->getName())
);
if ($form->isValid())
{
$job = $form->save();
// Saving the file to filesystem
$file = $form->getValue('my_upload_field');
$file->save('/path/to/save/'.$job->getId().'/myimage.'.$file->getExtension());
$this->redirect('job_show', $job);
}
}
不要犹豫,打开sfValidatedFile,看看它是如何工作的。