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