2016-05-02 13 views
3

私はリンクがvocabolaryIdフィールドである新しい/編集アクションに対して、ユーザが親(常にカテゴリ)を選択できるエンティティ(カテゴリ)を持っています。symfony2 + EntityType + queryBuilderとデフォルトのトップ値/エントリ

これは私のCategoryTypeです。

class CategoryType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $vocId = $options['data']->getVocabularyId(); 

     $builder 
      ->add('name') 
      ->add('vocabularyId',HiddenType::class,[ 
       'data' => $vocId, 
      ]) 
      ->add('description') 
      ->add('weight',null,[ 
       'label' => 'Posizione' 
      ]) 
     ; 
     $builder->add('parent',EntityType::class,array(
      'class' => 'AppBundle:Category', 
      'query_builder' => function (EntityRepository $er) use ($vocId) { 
       return $er->createQueryBuilder('c') 
        ->where('c.vocabularyId = ?1') 
        ->orderBy('c.name') 
        ->setParameter(1,$vocId); 
      } 
     )); 
    } 

私は「query_builder」パラメータを使用するのと同じvocabularyIdを持つすべてのカテゴリのリストを取得するには。

フォームをsymfonyに提出する際に、親(または空のテーブル)を選択せず​​に「この値は無効です」と返信します。 (親フィールドの場合)。

"null"の親を設定するにはどうすればよいですか?私は親を持たないカテゴリを意味します。

EDIT:私は「 『必要』 => false」に追加したが同様ステファンVierkantによって言うが、今、私は別のエラーを持っている:

:「警告spl_object_hash()は、文字列が与えられ、パラメータ1が対象であることを期待します」

これは私のコントローラのnewAction機能である:

/** 
    * Creates a new Category entity. 
    * 
    * @Route("/new", name="admin_category_new") 
    * @Method({"GET", "POST"}) 
    */ 
    public function newAction(Request $request, $vocId) 
    { 

     $category = new Category($vocId); 
     $form = $this->createForm('AppBundle\Form\CategoryType', $category); 
     $form->handleRequest($request); 

     if ($form->isSubmitted() && $form->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 
      dump($category); 
      exit(); 

      $em->persist($category); 
      $em->flush(); 

      return $this->redirectToRoute('admin_category_show', array('vocId' => $vocId, 'id' => $category->getId())); 
     } 

     return $this->render('category/new.html.twig', array(
      'category' => $category, 
      'form' => $form->createView(), 
      'vocId' => $vocId 
     )); 
    } 

答えて

5

セットrequireddocsfalseに:

$builder->add('parent',EntityType::class,array(
      'class' => 'AppBundle:Category', 
      'required' => false, 
      'query_builder' => function (EntityRepository $er) use ($vocId) { 
       return $er->createQueryBuilder('c') 
        ->where('c.vocabularyId = ?1') 
        ->orderBy('c.name') 
        ->setParameter(1,$vocId); 
      } 
     )); 

空のオプションを必要としない場合は、placeholderdocs)を設定できます。

+0

私はあなたのコードで試してみましたが、今は "警告:spl_object_hash()は、パラメータ1がオブジェクトであることを期待しています"という文字列を返します。 – ZioBudda

+0

エンティティを保存するコントローラアクションで質問を更新してください。 –

+0

これはおそらく役立ちます:http://stackoverflow.com/a/30181516/1405981 –

関連する問題