我有一个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;
}