Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Symfony上上载包含记录ID的目录中的文件_Php_File Upload_Symfony1 - Fatal编程技术网

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

Php 如何在Symfony上上载包含记录ID的目录中的文件,php,file-upload,symfony1,Php,File Upload,Symfony1,我在前端有一个文件上传表单 此时,当创建新记录时,文件将上载到 %sf_data_dir%/files/ 但由于某些业务逻辑,我需要将文件上载到 %sf_data_dir%/files/%record_id%/ 因此,上传的文件应在创建记录后保存 如何实现这一点?如果您使用文件上载,您的表单肯定会使用SFValidator文件(如果没有,那是错误的): 此验证器返回一个sfValidatedFile实例,该实例可以保存在您想要的任何位置(它比移动上传的文件更安全,对目录、文件名等进行检查)

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

此时,当创建新记录时,文件将上载到

%sf_data_dir%/files/
但由于某些业务逻辑,我需要将文件上载到

%sf_data_dir%/files/%record_id%/
因此,上传的文件应在创建记录后保存


如何实现这一点?

如果您使用文件上载,您的表单肯定会使用SFValidator文件(如果没有,那是错误的):

此验证器返回一个sfValidatedFile实例,该实例可以保存在您想要的任何位置(它比移动上传的文件更安全,对目录、文件名等进行检查)

在您的操作中(或以您想要/需要的形式),您现在可以执行以下操作:

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

谢谢!我提出了一个不同的解决方案,但你的方案看起来更优雅。我一测试就接受你的答案!
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);
  }
}