В моем приложении Symfony у меня есть объект события с адресом. Этот адрес должен быть доступен для многих событий, поэтому я добавил ссылку ManyToOne
.Подтвердить поле перед применением DataTransformer
address
объекта содержит 3 поля (street
, zipcode
и city
), но я хотел бы иметь только один ввод текст с машинописным для 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
или каким-либо способом для проверки не существующего поля. Если я вручную вызову RegEx-Validator, как бы выглядел мой код? Или есть другой (лучший) способ добиться того, что я ищу?