Intereting Posts
почему расшифровка AES java возвращает лишние символы? конвертировать в UTC без изменения настроек часового пояса php Как установить курсор на экран? счетчик числа кликов по ссылкам в php Быстрее или лучше использовать MySQL вместо текстовых файлов или имен файлов для порядка изображений с PHP? ORM QueryBuilder с субобъектами Entity Проблема Xdebug и Netbeans Как изменить второй раскрывающийся список на основе раскрывающегося списка? php password_verify не работает с базой данных Как получить стоимость акций RealTime, используя финансирование yahoo Как заставить приложение Facebook автоматически запрашивать требуемые разрешения после установки Как использовать базовую авторизацию в PHP curl Предупреждение: mysqli_stmt :: close () : недопустимый объект или ресурс mysqli_stmt … почему? Графическая диаграмма PHPExcel вызывает нечитаемое содержимое и диаграмму удалены WooCommerce: функция, возвращающая все идентификаторы продукта в определенной категории

Symfony2 как проверить отправку файлов через AJAX

Привет, сегодня я должен сделать валидацию для файлов (там изображений), отправляемых через 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); } 

Примечание . Переменные и объекты могут отличаться для ваших случаев использования.

Надеюсь это поможет!