2016-11-02 11 views
0

こんにちは、今日私はajax経由で送信するファイル(画像があります)の検証を行う必要があります。ファイルデータがajax経由で送られてくるのではない:/それは私たちのファイルコレクションを有効にし、エラーメッセージをそのpropertyPathに設定できるsymfony用のコードです。Symfony2 AJAX経由で送信されたファイルを検証する方法

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

答えて

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

:変数やオブジェクトは、あなたのユースケースのために異なる場合があります。

希望すると便利です。

+0

こんにちは、お返事ありがとう、私はテストし、私は家に帰るときに再びそれをrząd。 $ request-> isXmlHttpRequest()フォームがajaxによってサブミットされているかどうかをチェックする方法です。 –

+0

はい、フォームがajax経由で提出された場合はtrueを返します。 – Jeet

関連する問題