私のSymfonyアプリケーションには、アドレスを持つイベントエンティティがあります。このアドレスは多くのイベントで利用できるはずなので、ManyToOne
-relationを追加しました。
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()
ているため、validation-constraintは無視されているように見えます。
基本的に、DataTransformer
存在しないフィールドを検証するために、何らかの方法でフォームの検証が必要です。RegEx-Validatorを手動で呼び出すと、コードはどのようになりますか?または、私が探しているものを達成するための別の(より良い)方法はありますか?