可捕获致命错误:传递给AppBundle \ Form \ TagType :: __ construct()的参数1必须是Doctrine \ ORM \ EntityRepository的实例,没有给出,

时间:2016-07-20 06:17:16

标签: php forms symfony

我正在使用EntityType字段来创建多选下拉列表。此外,我想根据用户输入查询可用选项(例如standard),然后显示选项。 为此,我试图将EntityRepository注入我的TagType表单本身,以便我可以使用它CreateQueryBuilder。但我得到了这个错误 -

enter image description here

以下是我的代码TagType.php

<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;

class TagType extends AbstractType {

    protected $er;

    public function __construct(EntityRepository $er)
    {
        $this->er = $er;
    }

    private function getTagsByCategoryName($categoryname, $er) {
        return $er->createQueryBuilder('t')
                ->innerJoin('t.categories', 'c', 'WITH', 'c.categoryname = :categoryname')
                ->setParameter('categoryname', $categoryname)
                ->orderBy('t.id', 'ASC');
    }

    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder->add('tagname', EntityType::class, array(
            'class' => 'AppBundle:Tag',
            'choices' => $this->getTagsByCategoryName('standard'),
            'choice_label' => 'tagname',
            'expanded' => false,
            'multiple' => true,
            'label' => 'Choose Tags',
        ));
    }

    public function configureOptions(OptionsResolver $resolver) {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Tag',
            'tags' => null,
        ));
    }

}

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

2个答案:

  • 您无需在表单中注入EntityRepository即可使用query_builder的{​​{1}}选项。 EntityType将代表您注入EntityType,您只需要定义一个以EntityRepository为参数的方法。知道这个:

    EntityRepository

应该足够了。