4

在我的 Symfony 应用程序中,我有一个带有地址的事件实体。这个地址应该可以用于很多事件,所以我添加了一个ManyToOne-relation。

address实体包含 3 个字段(streetzipcodecity,但我希望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,我的代码会是什么样子?还是有另一种(更好的)方法来实现我正在寻找的东西?

4

1 回答 1

0

好的,我找到了答案。这还不是最好的方法。我刚刚从 Address-Entity 中删除了除一个 string 之外的所有字段addressstring。现在我可以将多个事件映射到一个位置并进行适当的 ajax 调用。但不幸的是,我无法再确定每个地址的城市、街道或邮政编码。这很好用,但正如我所说的那样不是解决方案。我避免了真正的问题......但它有效。

于 2013-04-30T13:33:50.763 回答