Symfony2:如何在没有表单的情况下验证 UploadedFile?
Symfony2: how to validate UploadedFile without form?
我需要从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 中的可上传扩展配置)并持久保存到数据库中。但是手动创建的验证 UploadedFile
return 这个错误:
The file could not be uploaded.
我可以禁用从 URL 上传的验证器并使用自定义方法验证文件,但使用 Symfony Validator 对象对我来说似乎是一个更干净的解决方案。
有什么办法让它起作用吗?
在 symfony 验证组件中,约束 UploadedFile 在内部使用此函数 http://php.net/manual/es/function.is-uploaded-file.php
你可以在这里看到https://github.com/symfony/HttpFoundation/blob/master/File/UploadedFile.php#L213
/**
* Returns whether the file was uploaded successfully.
*
* @return bool True if the file has been uploaded with HTTP and no error occurred.
*
* @api
*/
public function isValid()
{
$isOk = $this->error === UPLOAD_ERR_OK;
return $this->test ? $isOk : $isOk && is_uploaded_file($this->getPathname());
}
您必须创建自己的下载验证器(是的,您实际上是在使用 curl 下载文件)
我需要从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 中的可上传扩展配置)并持久保存到数据库中。但是手动创建的验证 UploadedFile
return 这个错误:
The file could not be uploaded.
我可以禁用从 URL 上传的验证器并使用自定义方法验证文件,但使用 Symfony Validator 对象对我来说似乎是一个更干净的解决方案。
有什么办法让它起作用吗?
在 symfony 验证组件中,约束 UploadedFile 在内部使用此函数 http://php.net/manual/es/function.is-uploaded-file.php
你可以在这里看到https://github.com/symfony/HttpFoundation/blob/master/File/UploadedFile.php#L213
/**
* Returns whether the file was uploaded successfully.
*
* @return bool True if the file has been uploaded with HTTP and no error occurred.
*
* @api
*/
public function isValid()
{
$isOk = $this->error === UPLOAD_ERR_OK;
return $this->test ? $isOk : $isOk && is_uploaded_file($this->getPathname());
}
您必须创建自己的下载验证器(是的,您实际上是在使用 curl 下载文件)