在我的Symfony應用程序中,我有一個帶有地址的事件實體。這個地址應該可用於許多事件,所以我添加了一個ManyToOne
-關係。在DataTransformer應用之前驗證字段
的address
實體包含3個字段(street
,zipcode
和city
),但我想有隻1預輸入爲address
文字輸入在我的形式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
中驗證表單驗證,或者驗證非existend字段的任何方法。如果我手動調用RegEx-Validator,我的代碼將會是什麼樣子?還是有另一種(更好)的方式來實現我所尋找的?