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);
}
}