应用DataTransformer之前验证字段

时间:2013-03-16 19:32:10

标签: symfony validation

在我的Symfony应用程序中,我有一个带有地址的事件实体。此地址应该适用于许多活动,因此我添加了ManyToOne - 关系。

address实体包含3个字段(streetzipcodecity),但我希望只有1个文本输入带有typeahead {{1以我的形式address。所以我创建了一个EventType来执行此操作。

通过AJAX请求,我收到地址并插入它们。如果输入新地址,我想创建一个新的数据库记录。我现在的问题是验证新输入的地址。

我的DataTransformer看起来像这样:

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()中进行表单验证,或以任何方式验证非existend字段。如果我手动调用RegEx-Validator,我的代码会是什么样子?还是有另一种(更好的)方法来实现我想要的东西吗?

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案。到目前为止,这不是最好的方式。我刚从地址实体中删除了所有字段,除了一个字符串addressstring。现在我可以将多个事件映射到一个位置并进行propper ajax调用。但不幸的是,我不能再确定每个地址的城市,街道或邮政编码。这很好但是,正如我所说的不是解决方案。我避免了真正的问题......但它确实有效。