我有一个实体类ContactsPage来存储有关电子邮件,电话等的一些信息。问题是将所有这些信息放到ContactsPage实体中定义的json格式的一个字段“contacts”中:
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,
)
);
}
感谢。
答案 0 :(得分:0)
几乎花了一天时间,但我自己找到了答案。 第一和第二个问题。 我必须在admin-class中定义prePersist和preUpdate方法,并将我的Entity作为参数,我可以在其中获取和处理"电子邮件"阵列:
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()来获取原始实体和'数据'要加载所需数据的属性:
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
)
);
}
...
}