我正在将传递数组集合(方法getProjects()返回它)形成(选择输入)并失败。此代码返回异常 - 在传递给选择字段的“Tasker \ WebBundle \ Entity \ Project”类型的对象上找不到“__toString()”方法。
有人可以帮忙吗?需要变压器吗?或者什么是正确的方式?
控制器:
/**
* @Route("/pridaj", name="web.task.add")
* @Template()
*/
public function addAction(Request $request)
{
$task = new Task;
/** @var User $loggedUser */
$loggedUser = $this->get('security.token_storage')->getToken()->getUser();
$form = $this->createForm(new AddTaskType(), $task, ['user' => $loggedUser]);
if ($form->handleRequest($request) && $form->isValid()) {
// some stuff
}
return [
'form' => $form->createView()
];
}
形式:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('project', 'entity', [
'label' => 'Projekt:',
'class' => 'TaskerWebBundle:Project',
'choices' => $options['user']->getProjects(),
'placeholder' => 'Označte projekt',
])
// ....
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setRequired(array(
'user',
));
$resolver->setDefaults(array(
'user' => null,
));
}
答案 0 :(得分:2)
只需将__ToString()
添加到您的Project类
Tasker\WebBundle\Entity\Project
class Project
{
....
function __toString() {
return $this->getName(); //or whatever string you have
}
}
答案 1 :(得分:0)
我想添加另一个答案,因为您不必将__toString()
添加到Project类中。 Symfony entity field type允许您指定用于显示的属性/字段。因此,您可以在表单配置中指定属性,而不是__toString()
,而不是$builder
->add('project', 'entity', [
'label' => 'Projekt:',
'class' => 'TaskerWebBundle:Project',
'choices' => $options['user']->getProjects(),
'placeholder' => 'Označte projekt',
'property' => 'name'
])
。
__toString()
如果您查看Symfony文档的this part,只有在未指定property
时才会看到{{1}}被自动调用。