symfony2 + EntityType + queryBuilder和默认的顶部值/条目

时间:2016-05-02 07:56:04

标签: symfony query-builder

我有一个实体(类别),用户可以为新的/编辑操作选择父级(总是类别),其中链接是vocabolaryId字段。

这是我的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"参数。

当我将表单提交给symfony而没有选择父母(或空表)时,它会回复我:"该值无效。" (对于父字段)。

如何设置" null"父母?我的意思是没有父母的类别。

编辑:我添加了"' required' =>假,#&34;就像Stephan 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
        ));
    }

1 个答案:

答案 0 :(得分:6)

requireddocs)设为false

$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)。