symfony 2如何将数组集合传递给输入选择

时间:2014-12-22 09:55:58

标签: php forms symfony

我正在将传递数组集合(方法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,
    ));
}

2 个答案:

答案 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}}被自动调用。