我有两个实体:活动和城市。我想实现创建事件表单。但其中一个字段应该是下拉列表,其中包含来自数据库(城市实体)的值。
目前我的控制器中有这个:
$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
答案 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))