私はエンティティのない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');
}
])
;
}
これは、フィルタを適用するために私のコントローラの機能です。
ありがとう@ houssem-balty。私は、フォームで使用されているエンティティの未使用フィールド、コンストラクタをすべて削除しようとします。私はIDを聞かせても、うまくいきませんでした。また、別のエンティティを使用して同じエラーをスローしてみてください。 –
エンティティを編集して追加できますか? –