Symfony2 doctrine下拉菜单从相关实体中选择选项

时间:2014-10-30 20:24:43

标签: symfony doctrine-orm dropdownchoice

我有两个实体:活动和城市。我想实现创建事件表单。但其中一个字段应该是下拉列表,其中包含来自数据库(城市实体)的值。

目前我的控制器中有这个:

$city = $this->getDoctrine()
    ->getRepository('AtotrukisMainBundle:City')
    ->findBy(
        array(),
        array('priority' => 'ASC', 'name' => 'ASC')
    );


$event = new Event();

$form = $this->createFormBuilder($event)
    ->add('name', 'text')
    ->add('description', 'textarea')
    ->add('startDate', 'datetime')
    ->add('endDate', 'datetime')
    ->add('map', 'text')
    ->add('city', 'choice', array(
        'choice_list' => new ChoiceList($city->getId(), $city->getName())
    ))
    ->add('save', 'submit', array('label' => 'Sukurti'))
    ->getForm();

$form->handleRequest($request);

但是我得到了错误: Error: Call to a member function getId() on array in /var/www/src/Atotrukis/MainBundle/Controller/EventController.php line 31

3 个答案:

答案 0 :(得分:1)

无论如何,解决方案可能是:

foreach($city as $value) {
    $id_set[]   = $value->getId();
    $name_set[] = $value->getName();
}

//...

->add('city', 'choice', array(
    'choice_list' => new ChoiceList($id_set, $name_set)
))

因为ChoiceList期望数组作为参数。您正在尝试在阵列上使用方法。

答案 1 :(得分:1)

明确表示要将这些内容从控制器中移除 - 更具可读性。

->add('approvers', 'entity', array(
    'class' => 'YourBundle:Entity',
    'query_builder' => function(EntityRepository $er) {
        return $er->orderBy('name', 'ASC'); // Here you can make some custome query
     },
     'label' => 'label',
))

答案 2 :(得分:0)

请检查:

->add('usr_role', EntityType::class, array('label' => 'Role : ',
     'class' => \Ibw\UserBundle\Entity\UserRole::class,
     'expanded' => false, 'placeholder' => 'Select Role',
     'multiple' => false))