不是指定实体的 Symfony 实体类型

  • 本文关键字:实体 类型 Symfony symfony
  • 更新时间 :
  • 英文 :


我有一个EntityType选项,像这样:

->add('responsible', EntityType::class, [
'class' => User::class,
'choice_label' => function ($u) {
return $u->getName()." (".$u->getEmail().")";
},
'placeholder' => null,
'choices' => $userChoices,

现在,输出:

<select ...>. 
<option value="xxx">Amando (amando@abreu.com)</option>
<option value="yyy">George (george@abreu.com)</option>
</select>

然而,我想要另一个非用户的选项,像这样:

select ...>. 
<option value="xxx">Amando (amando@abreu.com)</option>
<option value="yyy">George (george@abreu.com)</option>
<option value="null">Create new</option>
</select>

如果有人选择了这个"选项时,将添加一些表单元素来添加这个新用户。但是,这个功能超出了这个问题的范围。这个问题是关于非实体的选项。

如果我只是做:

$userChoices["Create new"] = null;

我当然得到:

Argument #1 ($choice) must be of type object, null given

我在这里要做的是可能的吗?如何?谢谢。

EntityType::class & 'class' => User::class将确保您的选项与用户实体相关。所以你不能添加任何其他与实体无关的选项。如果你真的需要一些定制的东西,那么用ChoiceType代替EntityType。然后,您可以使用另一种方法&可以把它附在你的choices中。

像这样

->add('responsible', ChoiceType::class, [
'placeholder' => null,
'choices' => $this->getResponsibleOptions()

然后像这样为getresponleoptions声明一个私有函数

private function getResponsibleOptions()
{
$responsibleOptions = $this->userRepository->findAll();
$options = [];
$totalOptions = count($responsibleOptions);
for($i = 0; $i < $totalOptions; $i++){
$options[ $responsibleOptions[$i]->getName()] = $responsibleOptions[$i]->getId();
}
return $options;
}

相关内容

最新更新