我正在使用EntityType
字段来创建多选下拉列表。此外,我想根据用户输入查询可用选项(例如standard
),然后显示选项。
为此,我试图将EntityRepository注入我的TagType表单本身,以便我可以使用它CreateQueryBuilder
。但我得到了这个错误 -
以下是我的代码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,
));
}
}
有什么想法吗?
答案 0 :(得分:3)
2个答案:
您无需在表单中注入EntityRepository
即可使用query_builder
的{{1}}选项。 EntityType
将代表您注入EntityType
,您只需要定义一个以EntityRepository
为参数的方法。知道这个:
EntityRepository
应该足够了。