我需要将下载文件从 URL上传到我的服务器并使用Uploadable (DoctrineExtensions)持久保存。几乎一切正常,我的方法是:
- 将文件下载
curl
到我服务器上的临时文件夹 - 创建
UploadedFile
方法并用属性值填充它 - 将其插入可上传实体
Media
- 做验证
- 坚持和冲洗
简化代码:
// ... download file with curl
// Create UploadedFile object
$fileInfo = new File($tpath);
$file = new UploadedFile($tpath, basename($url), $fileInfo->getMimeType(), $fileInfo->getSize(), null);
// Insert file to Media entity
$media = new Media();
$media = $media->setFile($file);
$uploadableManager->markEntityToUpload($media, $file);
// Validate file (by annotations in entity)
$errors = $validator->validate($media);
// If no errors, persist and flush
if(empty($errors)) {
$em->persist($this->parentEntity);
$em->flush();
}
如果我跳过验证,一切正常。文件成功移动到正确的路径(由 config.yml 中的 Uploadable 扩展配置)并持久化到数据库。但是手动创建的验证会UploadedFile
返回此错误:
无法上传文件。
我可以禁用 Validator 以从 URL 上传并使用自定义方法验证文件,但使用 Symfony Validator 对象执行此操作对我来说似乎是一个更清洁的解决方案。
有什么办法让它工作吗?