Привет, сегодня я должен сделать валидацию для файлов (там изображений), отправляемых через ajax, у меня есть огромные проблемы с проверкой в качестве аннотации, которые работают только тогда, когда мы отправляем нормальную форму! не если данные файлов, поступающие через ajax: /, то это код для symfony, который может использовать нашу коллекцию файлов и устанавливать сообщения об ошибках в их propertyPath.
$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++; } }
// действителен и т. д. наше действие js похоже на это:
$('form[name="product"]').on('submit', function () { var _self = $(this); var data = _self.serialize(); data = new FormData(_self[0]); data.append('ajax',true); $.ajax({ method: "POST", url: url, data: data, cache: false, contentType: false, processData: false, enctype: 'multipart/form-data', }); });
Вы можете проверить свой объект без создания формы. Просто знайте, что 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); }
Примечание . Переменные и объекты могут отличаться для ваших случаев использования.
Надеюсь это поможет!