連絡先(名前、電子メール)エンティティごとにPhoneNumberエンティティのコレクションがあります。PhoneNumberは、市外局番、交換、サフィックス、内線番号、そしてタイプセレクター(職場、自宅、携帯電話)に分類されます。DataTransformerを使用して、4つの異なるテキストボックスではなく、単一のフォームフィールドに数値を表示できるようにします。電話番号はデータベース内で一意ではありません。
更新:文字列バージョンからエンティティに変換するときに、エンティティ全体にアクセスするにはどうすればよいですか?私は以前にこの問題に遭遇し、テキストフィールド内の角かっこ内にエンティティのIDを入れてから、エンティティを取得するためのクエリを実行できるように、変換でそれらを再実行しました。
phonenumber_combinedは、私のPhoneNumberCombinedTypeクラスを参照するカスタムフォームタイプのサービスです。
Contact内の電話を収集するための私の追加方法:
->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?
}