我爲每個聯繫人(姓名,電子郵件)實體收集了PhoneNumber實體。 PhoneNumber被分解成區號,交換,後綴,擴展名,然後是一個類型選擇器(Work,Home,Mobile)。我想使用DataTransformer,以便數字可以顯示在單個表單字段中,而不是4個不同的文本框。電話號碼在數據庫中不是唯一的。Symfony2 DataTransformers - 如何在沒有ID或唯一值的情況下轉換回來?
已更新:如何在從字符串版本轉換回實體時訪問完整實體?我以前遇到過這個問題,並最終將實體的ID放在文本字段中的括號內,然後將它們在變換中重新排列,以便我可以執行查詢來獲取實體。
phonenumber_combined是引用我的PhoneNumberCombinedType類的自定義表單類型服務。
我對手機的聯繫人中集合添加方法:
->add('phones', 'collection', array(
'label' => 'Phones',
'type' => new PhoneNumberType(),
'allow_add' => true,
'allow_delete' => true
))
;
PhoneNumberType buildForm功能:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('phone', 'phonenumber_combined')
->add('type', 'entity',
array('class' => 'Test\Bundle\SystemBundle\Entity\Type',
'property' => 'name',
'query_builder' => function(EntityRepository $er){
return $er->createQueryBuilder('type')
->where('type.type = :t')
->orderBy('type.name', 'ASC')
->setParameter('t', 'PhoneNumber');
}))
;
}
的PhoneNumberCombinedType服務:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$transformer = new PhoneNumberToStringTransformer($this->om);
$builder->addViewTransformer($transformer);
}
PhoneNumberToStringTransformer:
public function transform($phonenumber)
{
if (null === $phonenumber) {
return null;
}
return $phonenumber->__toString();
}
public function reverseTransform($phonenumber)
{
if (!$phonenumber) {
return null;
}
// PHONE NUMBER IS JUST A STRING AT THIS POINT, HOW DO I GET THE ENTITY?
}