Doctrine orm Symfony 4>;过滤结果列表,最佳方式

Doctrine orm Symfony 4>;过滤结果列表,最佳方式,doctrine-orm,symfony4,Doctrine Orm,Symfony4,我正在做一个新的symfony4项目 我有一个演讲者列表,还有一个主题列表,两者之间有很多关系 class扬声器 { // ... /** *@ORM\ManyToMany(targetEntity=“App\Entity\Themes”,inversedBy=“speakers”) *@ORM\JoinTable(name=“演讲者\主题”) */ 私人主题; /** *演讲者。 */ 公共函数构造() { $this->themes=newarraycollection(); } /** *

我正在做一个新的symfony4项目

我有一个演讲者列表,还有一个主题列表,两者之间有很多关系

class扬声器
{
// ...
/**
*@ORM\ManyToMany(targetEntity=“App\Entity\Themes”,inversedBy=“speakers”)
*@ORM\JoinTable(name=“演讲者\主题”)
*/
私人主题;
/**
*演讲者。
*/
公共函数构造()
{
$this->themes=newarraycollection();
}
/**
*@return Collection |主题[]
*/
公共函数getThemes():集合
{
返回$this->themes;
}
/**
*@param-Themes$theme
*@返回扬声器
*/
公共功能addTheme(主题$theme):self
{
如果(!$this->themes->contains($themes)){
$this->themes[]=$theme;
}
退还$this;
}
/**
*@param-Themes$theme
*@返回扬声器
*/
公共功能移除主题(主题$主题):自我
{
如果($this->themes->contains($themes)){
$this->themes->removelement($theme);
}
退还$this;
}
}

课堂主题
{
// ...
/**
*@ORM\ManyToMany(targetEntity=“App\Entity\Speakers”,mappedBy=“themes”)
*/
私人演讲者$;
/**
*主题构造器。
*/
公共函数构造()
{
$this->speakers=newarraycollection();
}
/**
*@return Collection |扬声器[]
*/
公共函数getSpeakers():集合
{
返回$this->speakers;
}
/**
*@param Speakers$speaker
*@返回主题
*/
公共功能添加演讲者(演讲者$演讲者):自我
{
如果(!$this->speakers->contains($speaker)){
$this->speakers[]=$speaker;
$speaker->addTheme($this);
}
退还$this;
}
/**
*@param Speakers$speaker
*@返回主题
*/
公共功能移除扬声器(扬声器$speaker):自我
{
如果($this->speakers->contains($speaker)){
$this->speakers->removeement($speaker);
$speaker->removeTheme($this);
}
退还$this;
}
我希望能够根据主题筛选发言者列表

由于主题列表很短(3项),我想到了一个选择框,可以选择一个主题进行过滤

但我不知道最好的方法是什么:

  • 构建一个特定的表单,以进行筛选
class SpeakersFilterType扩展了AbstractType
{
/**
*@param FormBuilderInterface$builder
*@param数组$options
*/
公共函数buildForm(FormBuilderInterface$builder、array$options)
{
$builder
->添加('themes',EntityType::class,
[
“类”=>主题::类,
“多个”=>true,
“扩展”=>true
])
->添加('save',SubmitType::class,
[
'标签'=>'过滤器'
]);
}
/**
*@param options解析程序$resolver
*/
公共函数配置选项(选项解析器$resolver)
{
$resolver->setDefaults(
[
'method'=>Request::method\u GET,
//“数据_类”=>null,
“数据类”=>扬声器::类,
]
);
}
}
我试着构建一个你可以在下面看到的表单。 在configureOptions方法中,我指定了要获取的方法,我希望可以将一些GET参数传递给过滤器,但它不起作用

我有一个错误: 表单的视图数据应为类App\Entity\Speakers的实例,但为(n)数组。您可以通过将“data\u class”选项设置为null或添加将(n)数组转换为App\Entity\Speakers实例的视图转换器来避免此错误。

如果我按照建议将“data_class”选项设置为null,我没有错误,但我不确定它是否正常工作,关于它发送到URL的奇怪参数:

有人能帮忙吗?非常感谢一个Symfony新手