2016-07-18 9 views
0

src/AppBundle/Entity/ShoppingCart/Order.php OrderInterfaceが解決され、Doctrineで問題なく動作します解決済みのターゲットエンティティをSymfony2フォームタイプで使用するには?

なら、私はエラーを得た形'class' => OrderInterface::classでそれを使用してみてください:それは可能である

Class "ShoppingCartBundle\Entity\OrderInterface" seems not to be a managed Doctrine entity. Did you forget to map it?"

もちろん

が直接 'class' => Order::classを定義しますが、その場合には解決対象エンティティのコンフィグの利点を失います。

のsrc/ComplaintsBundle /フォーム/タイプ/ ComplaintType.php

... 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('order', EntityType::class, 
      array(
       'required' => true, 
       'class'  => OrderInterface::class, 
       'property' => 'id', 
      ) 
     ); 
} 
... 

アプリ/設定/ config.ymlevmEntityManagerのようにフォームで

答えて

0

を注入doctrine.dbal.connection.event_managerem。私は実際にこれをテストしていない

private function resolveClass(string $className): string 
{ 
    $eventArgs = new OnClassMetadataNotFoundEventArgs($className, $this->em); 
    $this->evm->dispatchEvent(Events::onClassMetadataNotFound, $eventArgs); 

    $metadata = $eventArgs->getFoundMetadata(); 
    if ($metadata === null) { 
     throw new InvalidArgumentException("Failed to resolve class $className"); 
    } 

    return $metadata->getName(); 
} 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('order', EntityType::class, 
      array(
       'required' => true, 
       'class'  => $this->resolveClass(OrderInterface::class), 
       'property' => 'id', 
      ) 
     ); 
} 

、ちょうどhow Doctrine does thisを見て:

その後、あなたはこのような何かを試みることができます。

+0

で達成することができる:「〜2.2、> = 2.2.3、 <2.5 "' –

+0

正確なバージョンはありますか?あなたは '作曲家ショー 'でチェックアウトすることができます。 なぜ機能しないのですか? –

+0

doctrine v2.4.8。このバージョンではクラス 'OnClassMetadataNotFoundEventArgs'も存在しないので、' Events :: onClassMetadataNotFound'もありません –

0

実際のクラス名はメタデータの読み込み中に解決されます。 インターフェイスメタデータによるリアルクラス名を取得するには、読み込みを開始する必要があります。 これが答えのためのおかげで、残念ながら、それはおそらく、プロジェクトで使用教義バージョン `「ドクトリン/ ORM」に、私の作品ではない次のコード

$entityManager = $managerRegistry->getManager(); 
$metadata = $entityManager->getClassMetadata(OrderInterface::class); 
$realClassName = $metadata->getName(); 
関連する問題