2013-03-16 67 views
4

在我的Symfony應用程序中,我有一個帶有地址的事件實體。這個地址應該可用於許多事件,所以我添加了一個ManyToOne-關係。在DataTransformer應用之前驗證字段

address實體包含3個字段(streetzipcodecity),但我想有隻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; 
    } 
} 

它們都工作地很好,但我對輸入的地址完全沒有驗證。

我試着在窗體類中添加一個約束,但由於DataTransformerbindRequest()上被調用,所以它忽略了驗證約束被忽略。

基本上,我想在我的DataTransformer中驗證表單驗證,或者驗證非existend字段的任何方法。如果我手動調用RegEx-Validator,我的代碼將會是什麼樣子?還是有另一種(更好)的方式來實現我所尋找的?

回答

0

好吧,我找到了答案。這是迄今爲止不是最好的方式。我只是刪除了地址實體的所有字段,除了一個字符串addressstring。現在我可以將多個事件映射到一個位置,並製作出一個Ajax調用。但不幸的是,我可以不再決定每個地址的城市,街道或郵政編碼。這工作正常,但是,因爲我沒有說明解決方案。我避免了真正的問題......但它工作。