2013-08-28 8 views
8

I Sonata Admin bin mit und ich habe ein Feld von Kategorien und ich brauche sie, um wie ein Baum in ausgewählten zeigen:Benutzerdefinierte Auswahl Liste der sonata_type_model Feld mit Sonata Admin

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

Es ist möglich? Ich habe es versucht, auch in ‚choice_list‘ ein Array in getTreeCatsArray Verfahren erzeugen:

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

Dies zeigt den Fehler:

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

Ich bin nicht sicher, ob ich Feldtyp ‚sonata_type_model‘ verwenden müssen, oder ' Wahl‘

Antwort

7

Versuchen:

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

Dies funktioniert nur, wenn Sie Unternehmen haben Category.

Siehe this article über einen Baum Editor für Category Einheit für SonataAdminBundle zu schaffen. Here ist derselbe Artikel auf Russisch, enthält aber in der ersten Variante fehlenden Code.

25

OK, ich habe die Liste der Kategorien in Baum bestellt es in der zugehörigen Einheit umfassen wie folgt:

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 
     )) 
     ... 
    ; 
} 

ich hoffe mir kann jemand helfen

+0

Ich musste 'CompanyMyBundle: Category' verwenden. – Patrick

+0

Ich habe versucht, aber es funktioniert nicht in meinem Fall – Kirit

0

die oben genannten Antworten Afterreading ich hatte zu tun, um die Funktionalität zu erhalten, die das OP war:

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(); 
} 
Verwandte Themen