如何在Symfony上包含记录ID的目录中上传文件

时间:2011-10-03 08:49:10

标签: php file-upload symfony1

我在前端有一个文件上传表单。

目前,创建新记录时,文件将上传到

%sf_data_dir%/files/

但由于某些业务逻辑,我需要将文件上传到

%sf_data_dir%/files/%record_id%/

因此,在创建记录后,应保存上传的文件。

我怎样才能做到这一点?

1 个答案:

答案 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,看看它是如何工作的。