Symfony2如何验证通过AJAX发送的文件

时间:2016-11-02 23:22:07

标签: php ajax validation symfony

嗨今天我必须对通过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++;
    }
}

1 个答案:

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

注意:对于您的用例,变量和对象可能会有所不同。

希望这有帮助!