1

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

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

$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

4

3 回答 3

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',
))
于 2014-10-31T09:26:42.133 回答
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 需要一个数组作为参数。您正在尝试在数组上使用方法。

于 2014-10-30T20:51:09.573 回答
0

请检查:

->add('usr_role', EntityType::class, array('label' => 'Role : ',
     'class' => \Ibw\UserBundle\Entity\UserRole::class,
     'expanded' => false, 'placeholder' => 'Select Role',
     'multiple' => false))
于 2015-12-23T11:23:36.677 回答