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