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