我想让我的Symfony2程序只接受PDF文件。 在实体类中我有:
/**
* File
*
* @var File
*
* @Assert\File(
* maxSize = "5M",
* mimeTypes = {"application/pdf", "application/x-pdf"},
* maxSizeMessage = "The maxmimum allowed file size is 5M.",
* mimeTypesMessage = "Please upload a valid PDF"
* )
*/
protected $file;
问题是为什么我仍然可以上传其他文件。我目前正在通过REST API上传。
代码:
public function postFileAction(Request $request){
$name = $request->get('name');
$path = $request->get('path');
$file = $request->files->get('file');
$filesTest = new FilesTest();
$filesTest->setName($name);
$filesTest->setFile($file);;
$manager = $this->getDoctrine()->getManager();
$manager->persist($filesTest);
$manager->flush();
}
我是symfony2的新手,所以我可能误解了如何处理这个问题。有没有人有什么建议?
答案 0 :(得分:2)
您实际上并未验证这些验证规则。
试试这个:
public function postFileAction(Request $request)
{
$name = $request->get('name');
$path = $request->get('path');
$file = $request->files->get('file');
$filesTest = new FilesTest();
$filesTest->setName($name);
$filesTest->setFile($file);
$validator = $this->get('validator'); // Assuming ContainerAware
$errors = $validator->validate($filesTest);
if (count($errors) > 0) {
// Handle your errors here
} else {
$manager = $this->getDoctrine()->getManager();
$manager->persist($filesTest);
$manager->flush();
}
// Return your response etc...
}
如果您想了解有关此方式验证的更多信息,请查看此处:http://symfony.com/doc/current/book/validation.html
使用REST时,您还可以欺骗表单提交,因此,不要排除使用表单。
答案 1 :(得分:0)
从Symfony 3.4开始,如果您只想验证一个字段,则可以使用:
public function validateField(ValidatorInterface $validator){
$violations = $validator->validatePropertyValue(
$entity,
'propertyName',
$propertyValue
);
foreach ($violations as $violation) {
// $violation->getMessage();
}
}