在我的 Symfony 应用程序中,我有一个带有地址的事件实体。这个地址应该可以用于很多事件,所以我添加了一个ManyToOne
-relation。
该address
实体包含 3 个字段(street
和zipcode
)city
,但我希望address
在我的表单中只有 1 个带有预先输入的文本输入EventType
。所以我创建了一个DataTransformer
这样做。
通过 AJAX 请求,我收到地址并插入它们。如果输入了新地址,我想创建一个新的数据库记录。我现在的问题是验证新输入的地址。
我的DataTransformer
样子是这样的:
class StringToAddressTransformer implements DataTransformerInterface {
/**
* @var ObjectManager
*/
private $om;
/**
* @param ObjectManager $om
*/
public function __construct(ObjectManager $om){
$this->om = $om;
}
public function transform($addrobj){
if (!$addrobj) {
return null;
}
return (string)$addrobj;
}
public function reverseTransform($address){
if (null === $address) {
return "";
}
preg_match('/^([A-Z][-A-Z ]+)\s+(\d+), (\d{5}) ([A-Z]+)$/i', $address, $res);
$street = $res[1] . ' '. $res[2];
$zipcode = $res[3];
$city = $res[4];
$addrobj = $this->om->getRepository('FSchubert\SiyabongaBundle\Entity\Address')->findOneBy(array(
'street' => $street, 'zipcode' => $zipcode, 'city' => $city
));
if(is_null($addrobj)){
$addrobj = new Address();
$addrobj->setStreet($street);
$addrobj->setZipcode($zipcode);
$addrobj->setCity($city);
}
return $addrobj;
}
}
一切正常,但我绝对没有验证输入的地址。
我尝试在表单类中添加一个约束,但是由于DataTransformer
调用了bindRequest()
它,在我看来验证约束被忽略了。
基本上,我希望以我的DataTransformer
方式或任何方式验证不存在的字段。如果我手动调用 RegEx-Validator,我的代码会是什么样子?还是有另一种(更好的)方法来实现我正在寻找的东西?