2014-08-28 35 views
0

我有一個實體類ContactsPage來存儲電子郵件,電話等的問題是讓所有此信息將在JSON格式中定義一個字段的「人脈」的一些信息ContactsPage實體:對於電子郵件處理在SonataAdminBundle不存在收集場的形成

class ContactsPage 
{ 
... 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="contacts", type="text", nullable=true) 
    */ 
    private $contacts; 
... 
} 

ContactsPageAdmin形式構建例如:

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
     ->add('emails', 'collection', 
       array(
        'mapped' => false, 
        'required' => false, 
        'type' => 'text', 
        'allow_add' => true, 
        'allow_delete' => true, 
      ) 
     ); 
} 
  • 如何和我在哪裏可以買到這種 「電子郵件」 數組(或集合)?
  • 我在哪裏可以處理這個陣列,使JSON和保存ContactsPage實體之前,將其推入「聯繫人」字段?
  • 在哪裏,我該怎麼處理「聯繫人」字段和轉讓全部來自JSON信息解碼成編輯表單(進入「電子郵件」集合)?

謝謝。

回答

0

花了差不多一天,但我自己找到答案。 第一個和第二個問題。 我不得不與我的實體定義管理類中prePersist和更新前的方法作爲參數,在那裏我能得到和處理「電子郵件」數組:

class ContactsPageAdmin extends Admin 
{ 
... 
    public function prePersist($contactsPage) 
    { 
     $emails = $this->getForm()->get('emails')->getData(); 
     $contactsPage->setContacts(json_encode($emails)); 
    } 
    public function Update($contactsPage) 
    { 
     $emails = $this->getForm()->get('emails')->getData(); 
     $contactsPage->setContacts(json_encode($emails)); 
    } 
... 
} 

什麼第三個問題。我只需要使用$ this-> getSubject()來獲得原始實體和'data'屬性來加載所需的數據:

class ContactsPageAdmin extends Admin 
{ 
... 
    protected function configureFormFields(FormMapper $formMapper) 
     $entity = $this->getSubject();   // getting original Entity 
     $json = $entity->getContacts();   // field with json data 
     $array = json_decode($json, true); 

     // preparing data to fulfill necessary form fields 
     $array['emails'] = is_array($array['emails']) ? $array['emails'] : array(); 

     $formMapper 
      ->add('emails', 'collection', 
       array(
        'mapped' => false, 
        'required' => false, 
        'type' => 'text', 
        'allow_add' => true, 
        'allow_delete' => true, 
        'data' => $array['emails'] // embeding prepared data into collection 
       ) 
      ); 
    } 
... 
}