2016-11-02 1 views
0

Hallo heute, ich muss eine Validierung für Dateien (da Bilder) über AJAX senden, habe ich große Probleme mit der Validierung als Annotation, die nur funktionieren, wenn wir normal Formular senden! nicht wenn Dateien über Ajax kommen:/das ist Code für Symfony, der unsere Sammlung von Dateien validieren kann und Fehlermeldungen an ihren propertyPath setzen kann.Symfony2 wie validieren Dateien über AJAX senden

$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++; 
    } 
} 

// gültig usw. unsere js Aktion wie ähnlich wie diese:

$('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', 
      }); 
      }); 

Antwort

1

Sie können Ihr Unternehmen ohne Formular-Builder validieren. Nur wissen, dass validator ein Dienst selbst ist. Sie können unten in Ihrem controller zu etwas ähnliches verwenden:

// 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); 
} 

Hinweis: Variablen und Objekte können für Ihre Anwendungsfälle unterschiedlich sein.

Hoffe, das hilft!

+0

Hallo, Danke für die Antwort, ich teste und rząd es wieder, wenn ich wieder nach Hause komme. $ request-> isXmlHttpRequest() Dies ist eine Möglichkeit zu überprüfen, ob das Formular von Ajax übergeben wird. –

+0

Ja, das wird wahr, wenn das Formular über Ajax gesendet wird. – Jeet