2017-04-20 7 views
0

私はエンティティのないFormTypeを持っています。コレクションの要素をフィルタリングするために使用されます。フォームフィールドの1つはEntityTypeです。フィールドをフィルタリングしてフォームを送信するように選択されると、これらはセッション配列に格納され、インデックスビューに戻るとセッションに格納されたフィールドを持つクエリが作成されます。Symfony2例外:choiceフィールドに渡されたエンティティを管理する必要があります。おそらくエンティティマネージャにそれらを保持しますか?

問題は、エンティティフィールドで要素を選択してフォームを送信したときに、「選択フィールドに渡されたエンティティを管理する必要があります」という例外がスローされます。これは他のフィールドとうまく動作します。

私はDoctrineのコードを通過し、エラーをチェックオブジェクトがObjectManagerの内部にある場合と、クラスIdReaderにスローされます。私は解決策を探し

if (!$this->om->contains($object)) { 
    throw new RuntimeException(
     'Entities passed to the choice field must be managed. Maybe '. 
     'persist them in the entity manager?' 
    ); 
} 

が、それらのどれも私のために動作しません。私は他のプロジェクトでこの種のフィルタを使い、うまく動作します。私はエンティティを正しく管理することができない設定問題の一種だと思っていますが、私はdoctrine設定で 'auto_mapping:true'を持っています。

これは私にformTypeです:事前に

public function applyFilterAction(Request $request) { 
    $filtre = []; 
    $sessio = $this->get('session'); 

    $form = $this->createForm(
     new RelacioFiltreType(), 
     $filtre, 
     [ 
      'action' => $this->generateUrl('relacio_aplicar_filtre'), 
      'method' => 'POST' 
     ] 
    ); 

    $form->handleRequest($request); 

    if ($form->isValid()) { 
     $dades = $form->getData(); 
     $sessio->set('relacio.filtre.institucio',$dades['institucio'] ? $dades['institucio'] : null); 
     return $this->redirectToRoute('relacions',['request' => $request]); 
    } 

    return array(
     'form' => $form->createView() 
    ); 
} 

ありがとう:

public function buildForm(FormBuilderInterface $builder, array $options) { 

    $builder 
     ->add('estat','choice', array(
      'required' => false, 
      'choices' => Relacio::$arrayEstat, 
      'multiple' => true, 
      'placeholder' => '--', 
      'label' => 'Estat' 
     )) 
     ->add('institucio', 'entity', [ 
      'label' => 'Institució', 
      'class' => 'RelacioBundle:Institucio', 
      'required' => false, 
      'query_builder' => function(EntityRepository $er) { 
       return $er->createQueryBuilder('s') 
         ->addOrderBy('s.id', 'ASC'); 
      } 
     ]) 
    ; 
} 

これは、フィルタを適用するために私のコントローラの機能です。

答えて

0

を、私は解決策を見つけました。エンティティ全体ではなくIDを使用して、セッションに渡されたデータをエンティティについて変更します。

私はこのようなセッション値を設定:

$sessio->set('relacio.filtre.institucio',$dades['institucio'] ? $dades['institucio']->getId() : null); 

をそして私はこのような値だ:

$dades_filtre['institucio'] = $sessio->get('relacio.filtre.institucio') ? $em->getRepository('XalocSafErpBundle:SpTrbInstit')->find($sessio->get('relacio.filtre.institucio')) : null; 

おかげですべてを。

0

エンティティにコンストラクタがある場合は、それを削除してください。私は同じ問題を抱えていて解決しました。

も参照してください:Response for the same question

+0

ありがとう@ houssem-balty。私は、フォームで使用されているエンティティの未使用フィールド、コンストラクタをすべて削除しようとします。私はIDを聞かせても、うまくいきませんでした。また、別のエンティティを使用して同じエラーをスローしてみてください。 –

+0

エンティティを編集して追加できますか? –

関連する問題