嗨,我正在将传递数组集合(方法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,
));
}
只需将__ToString()
添加到项目类
Tasker'WebBundle'Entity'Project
class Project
{
....
function __toString() {
return $this->getName(); //or whatever string you have
}
}
我想
添加另一个答案,因为您不必将__toString()
添加到 Project 类中。 Symfony实体字段类型允许您指定用于显示的属性/字段。 因此,您可以像这样在表单配置中指定属性,而不是__toString()
:
$builder
->add('project', 'entity', [
'label' => 'Projekt:',
'class' => 'TaskerWebBundle:Project',
'choices' => $options['user']->getProjects(),
'placeholder' => 'Označte projekt',
'property' => 'name'
])
如果您检查 Symfony 文档的这一部分,您将看到仅当您不指定property
时才会自动调用__toString()
。