2013-08-28 70 views
8

我使用奏鳴曲管理員和我的名單有類別的領域,我需要向他們展示才能像一棵樹的選擇:自定義選擇與索納塔聯繫sonata_type_model場

<select> 
    <option>Category father-1</option> 
    <option>--Category child-1-1</option> 
    <option>--Category child-1-2</option> 
    <option>--Category child-1-3</option> 
    <option>----Category child-1-3-1</option> 
    <option>----Category child-1-3-2</option> 
    <option>--Category child-1-4</option> 
    <option>--...</option> 
    <option>Category father-2</option> 
</select> 

這是可能的嗎?我已經嘗試過了,包括「choice_list」的陣列getTreeCatsArray方法產生:

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $tree_cat_array = $this->em->getRepository('MyBundle:Category')->getTreeCatsArray(); 

    $formMapper 
     ->add('category', 'sonata_type_model', array(
       'empty_value' => '', 
       'choice_list' => $tree_cat_array)); 
} 

這顯示了錯誤:

The option "choice_list" with value "Array" is expected to be of type "null", "Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface" 

我不知道我是否必須使用字段類型「sonata_type_model」或'選擇」

回答

7

嘗試:

->add('category', 'entity', array(
     'class' => 'Acme\Entity\Category', 
) 

,如果你有實體這隻會工作。

請參閱this article關於創建Category實體的樹編輯器SonataAdminBundleHere是俄文版的同一篇文章,但在第一個版本中包含缺少的代碼。

25

好了,我得到了在樹排序類別的清單,包括在相關實體如下:

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $em = $this->modelManager->getEntityManager('MyBundle\Entity\Category'); 

    $query = $em->createQueryBuilder('c') 
       ->select('c') 
       ->from('MyBundle:Category', 'c') 
       ->where('c.parent IS NOT NULL') 
       ->orderBy('c.root, c.lft', 'ASC'); 

    $formMapper 
     ... 
     ->add('categoria', 'sonata_type_model', array(
      'required' => true, 
      'query' => $query 
     )) 
     ... 
    ; 
} 

我希望它可以幫助別人

+0

我不得不使用'CompanyMyBundle:Category'。 – Patrick

+0

我已經嘗試過,但在我的情況下不起作用 – Kirit

0

Afterreading上述答案我有做以下操作來獲得OP之後的功能:

protected function configureFormFields(FormMapper $formMapper) 
{ 

$em = $this->modelManager->getEntityManager('YourBundleFile\YourBundleFileBundle\Entity\YourEntity'); 

$qb = $em->createQueryBuilder(); 

$qb = $qb->add('select', 'u') 
     ->add('from', 'YourBundleFile\YourBundleFileBundle\Entity\YourEntity u'); 

$query = $qb->getQuery(); 
$arrayType = $query->getArrayResult(); 

$formMapper 
->add('yourProperty', 'choice', array('choices'=>$arrayType)) 
-end(); 
}