【问题标题】:symfony2 + EntityType + queryBuilder and default top value/entrysymfony2 + EntityType + queryBuilder 和默认最高值/条目
【发布时间】:2016-05-02 07:56:03
【问题描述】:

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

这是我的类别类型。

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' => false”,就像 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
        ));
    }

【问题讨论】:

    标签: symfony symfony-forms query-builder


    【解决方案1】:

    required (docs) 设置为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);
                }
            ));
    

    如果您不想要空选项,可以设置placeholder (docs)。

    【讨论】:

    • 我已经尝试过你的代码,但现在我得到“警告:spl_object_hash() 期望参数 1 是对象,给定字符串”
    • 请使用保存实体的控制器操作更新您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    相关资源
    最近更新 更多