Symfony 2,实体上带有 ChoiceType 的 createFormBuilder,choice_label 是 int
Symfony 2, createFormBuilder with ChoiceType on Entity, choice_label is int
我对 Symfony 2 和表单生成器有点小问题。
我想根据 Doctrine findAll 结果创建一个 ChoiceType 字段。
我的选择是实体数组,但在 choice_label 函数中,第一个变量是 int !
我放了一些代码来解释:
$categories = $categoryRepository->findAll();
foreach ($categories as $value) {
echo "category name : ".$value->getName()."<br/>";
}
/* Result :
category name : First
category name : Second
*/
$form = $this->createFormBuilder($dance)
->add('name', TextType::class, array('label' => 'Nom de la dance'))
->add('description', TextareaType::class, array('label' => 'Description'))
->add('creationDate', DateTimeType::class, array('label' => 'Date de création'))
->add('category', ChoiceType::class, [
'choices' => $categories,
'choice_label' => function($category, $key, $index) {
var_dump($category);
// Result : int(0)
return $category->getName();
// Exception !
},
'choice_attr' => function($category, $key, $index) {
return ['class' => $category->getId()];
},
])
->add('save', SubmitType::class, array('label' => 'Sauvegarder'))
->getForm();
当然,我有一个致命错误:调用整数上的成员函数 getName() ...
有人可以帮我解决这个问题吗?
谢谢!
如果您使用的是比 Symfony 2.7 更旧的版本,您不能简单地将一个对象数组传递给 choices
选项。这仅在 Symfony >=2.7 中受支持。如果你想在 Symfony 2.7 或 2.8 中这样做,你必须激活 choices_as_values
option:
'choices_as_values' => true
默认情况下,在 Symfony 中 2.x choices
是相反构建的:the keys of the array become the value and the value of they array becomes the label。因此,数组中的第一个元素将为 0。 :)
或者,您可能希望使用 EntityType
class 而不是 ChoiceType
。它会在任何情况下将实际对象传递给函数。
此外,如果你想指定一个属性你的实体(或引用实体)作为你的标签,你也可以使用property paths:
'choice_label' => 'name'
我对 Symfony 2 和表单生成器有点小问题。 我想根据 Doctrine findAll 结果创建一个 ChoiceType 字段。
我的选择是实体数组,但在 choice_label 函数中,第一个变量是 int !
我放了一些代码来解释:
$categories = $categoryRepository->findAll();
foreach ($categories as $value) {
echo "category name : ".$value->getName()."<br/>";
}
/* Result :
category name : First
category name : Second
*/
$form = $this->createFormBuilder($dance)
->add('name', TextType::class, array('label' => 'Nom de la dance'))
->add('description', TextareaType::class, array('label' => 'Description'))
->add('creationDate', DateTimeType::class, array('label' => 'Date de création'))
->add('category', ChoiceType::class, [
'choices' => $categories,
'choice_label' => function($category, $key, $index) {
var_dump($category);
// Result : int(0)
return $category->getName();
// Exception !
},
'choice_attr' => function($category, $key, $index) {
return ['class' => $category->getId()];
},
])
->add('save', SubmitType::class, array('label' => 'Sauvegarder'))
->getForm();
当然,我有一个致命错误:调用整数上的成员函数 getName() ...
有人可以帮我解决这个问题吗?
谢谢!
如果您使用的是比 Symfony 2.7 更旧的版本,您不能简单地将一个对象数组传递给 choices
选项。这仅在 Symfony >=2.7 中受支持。如果你想在 Symfony 2.7 或 2.8 中这样做,你必须激活 choices_as_values
option:
'choices_as_values' => true
默认情况下,在 Symfony 中 2.x choices
是相反构建的:the keys of the array become the value and the value of they array becomes the label。因此,数组中的第一个元素将为 0。 :)
或者,您可能希望使用 EntityType
class 而不是 ChoiceType
。它会在任何情况下将实际对象传递给函数。
此外,如果你想指定一个属性你的实体(或引用实体)作为你的标签,你也可以使用property paths:
'choice_label' => 'name'