嗨今天我必须对通过ajax发送的文件(有图像)进行验证,我的验证作为注释存在很大问题,只有当我们发送正常形式时才有效!如果文件数据来自ajax:/那么这是symfony的代码,它可以有效地收集我们的文件并将错误消息设置到他们的propertyPath。
color
//有效等 我们的js动作与此类似:
$validatorImage = new Image(); // Symfony\Component\Validator\Constraints\Image
$validatorImage->mimeTypesMessage = 'image.mimeTypesMessage';
if ($form->isSubmitted()) {
$i = 0;
foreach ($form->get('images') as $image) {
$errorList = $this->get('validator')->validateValue(
$image->get('file')->getData(),
$validatorImage
);
if (count($errorList)) {
foreach ($errorList as $error) {
$image->addError(
new FormError(
$error->getMessage(),
null,
array(),
null,
array('propertyPath' => 'children[images].data['.$i.'].file')
)
);
}
}
$i++;
}
}
答案 0 :(得分:1)
您可以在没有表单构建器的情况下验证您的实体。只要知道validator
本身就是一项服务。您可以在controller
中使用类似于以下内容的内容:
// Collect data from ajax .
if ($request->isXmlHttpRequest()) {
$data = $request->get('data');
$files = $request->files;
// Prepare your entity, Know you haven't uploaded image yet.
$image = new Image();
$image->setFile($files['image']);
// Call your validator to validate Image Entity.
$validator = $this->get('validator');
$errors = $validator->validate($image);
$errorMessages = array();
if (count($errors) > 0) {
foreach ($errors as $error) {
$errorMessages[] = $error->getMessage();
}
}
// send response to ajax accordingly. $errorMessages has all the errors as string.
$response = array();
return new JsonResponse($response);
}
注意:对于您的用例,变量和对象可能会有所不同。
希望这有帮助!