2017-09-13 3 views
0

を変更します。symfonyのバリデータは、私はこのようになりますバリ持つフォームフィールド

class ValidUSPSAddressValidator extends ConstraintValidator 
    { 
     public function validate($protocol, Constraint $constraint) 
     { 
      $verify = new USPSAddressVerify('*******'); 
      $uspsAddress = new USPSAddress(); 
      $apartment = $protocol->getApartment(); 
      $address = $protocol->getAddress(); 
      $city = $protocol->getCity(); 
      $state = $protocol->getState(); 
      $zip = $protocol->getZip(); 


      $uspsAddress->setApt($apartment); 
      $uspsAddress->setAddress($address); 
      $uspsAddress->setCity($city); 
      $uspsAddress->setState($state); 
      $uspsAddress->setZip5($zip); 
      $uspsAddress->setZip4(''); 
      $verify->addAddress($uspsAddress); 

      $verify->verify(); 
      $response = $verify->getArrayResponse(); 
      $responseAddress = $response['AddressValidateResponse']['Address']; 


      if ($verify->isError()) { 
       $this->context->buildViolation($constraint->message) 
        ->addViolation(); 
      }else{ 
       $protocol->setAddress($responseAddress['Address2']); 
       $protocol->setCity($responseAddress['City']); 
       $protocol->setState($responseAddress['State']); 
       $protocol->setZip($responseAddress['Zip5']); 

       //****** THE BELOW IF ****************** 
       if($responseAddress['Address2'] != $address || $responseAddress['City'] != $city || $responseAddress['State'] != $state || $responseAddress['Zip5'] != $zip){ 
        $this->context->buildViolation($constraint->verify) 
         ->addViolation(); 
       } 

      } 
     } 
    } 

が、その中にIF最後の文やコードを見てみると...私はUSPSの応答が何であったかに設定するフィールドをしようとしていますし、バリデーターは、基本的にユーザーに、更新されたデータがフィールドを変更するのを最後に確認し、再度検証し、データがUSPSデータと正確に一致する限り、それを維持します。問題は、protocol-> setXXXXX()が永続化されるオブジェクトのデータを設定するが、フォームを再表示するときにフィールドにデータを表示しないということです。

答えて

0

ValidatorのポイントObjectを検証することです。data transformersまたはform listeners、さらにはevent listenersを試して、バリデータの内部でこの種のロジックをスキップしてください。

+0

フォームリスナー「PRE_SUBMIT」に追加されました。しかし、私が必要としていることは、この解決策のように感じます。少なくとも私がやっているやり方はちょっとハックです... USPSから応答が返ってくると、私はすべてのフィールドを一致させ、そのデータユーザーが最初に送信したものから変更されました。基本的には住所を再確認するというエラーだけをフォームに追加します。この時点で、ユーザーは訂正されたアドレスを受け入れて、もう一度送信します...このプロセスを改善するための他のポインタはありますか? – snoop168

関連する問題