2014-10-30 94 views
1

我有兩個實體:Event和City。我想實現創建事件表單。但其中一個字段應該是數據庫(城市實體)中的值的下拉列表。Symfony2學說下拉菜單從相關實體中選擇選項

目前我有一個在我的控制器:

$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

你所看到的,當你傾倒'$ city'?因爲正如我所看到的 - 這是一個結果數組,由Doctrine經理返回。 – Nevertheless 2014-10-30 20:41:54

回答

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) 
)) 

因爲選擇列表預計的陣列作爲論據。您正嘗試在數組上使用方法。

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', 
)) 
0

請檢查:

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