我正在研究一个新的Symfony 4项目。
我有一个 扬声器 的列表和一个 主题 的列表,并且我有一个ManyToMany关系之间。
class Speakers
{
// ...
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Themes", inversedBy="speakers")
* @ORM\JoinTable(name="speakers_themes")
*/
private $themes;
/**
* Speakers constructor.
*/
public function __construct()
{
$this->themes = new ArrayCollection();
}
/**
* @return Collection|Themes[]
*/
public function getThemes(): Collection
{
return $this->themes;
}
/**
* @param Themes $theme
* @return Speakers
*/
public function addTheme(Themes $theme): self
{
if (!$this->themes->contains($theme)) {
$this->themes[] = $theme;
}
return $this;
}
/**
* @param Themes $theme
* @return Speakers
*/
public function removeTheme(Themes $theme): self
{
if ($this->themes->contains($theme)) {
$this->themes->removeElement($theme);
}
return $this;
}
}
class Themes
{
// ...
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Speakers", mappedBy="themes")
*/
private $speakers;
/**
* Themes constructor.
*/
public function __construct()
{
$this->speakers = new ArrayCollection();
}
/**
* @return Collection|Speakers[]
*/
public function getSpeakers(): Collection
{
return $this->speakers;
}
/**
* @param Speakers $speaker
* @return Themes
*/
public function addSpeaker(Speakers $speaker): self
{
if (!$this->speakers->contains($speaker)) {
$this->speakers[] = $speaker;
$speaker->addTheme($this);
}
return $this;
}
/**
* @param Speakers $speaker
* @return Themes
*/
public function removeSpeaker(Speakers $speaker): self
{
if ($this->speakers->contains($speaker)) {
$this->speakers->removeElement($speaker);
$speaker->removeTheme($this);
}
return $this;
}
我希望能够根据主题过滤发言人列表。
由于主题列表很短(3个项目),因此我想到了一个选择框,可以选择要过滤的主题。
但是我不知道什么是最好的方法:
class SpeakersFilterType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('themes', EntityType::class,
[
'class' => Themes::class,
'multiple' => true,
'expanded' => true
])
->add('save', SubmitType::class,
[
'label' => 'Filter'
]);
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'method' => Request::METHOD_GET,
// 'data_class' => null,
'data_class' => Speakers::class,
]
);
}
}
我试图构建一个表单,如下所示。 在 configureOptions 方法中,我将方法指定为GET,我希望可以传递一些get参数以进行过滤,但它不起作用。
我有一个错误: 该表单的视图数据应该是App \ Entity \ Speakers类的实例,但是是一个(n)数组。您可以通过将“ data_class”选项设置为null或添加一个将a(n)数组转换为App \ Entity \ Speakers实例的视图转换器来避免此错误。
如果我按照建议将选项'data_class'设置为null,则不会出现错误,但是我不确定它是否有效,关于它发送到URL的奇怪参数:
有人可以帮忙吗?非常感谢Symfony新手。