2012-02-16 10 views
5

Tengo una tabla Categorías, construida con una arquitectura de árbol, usando Doctrina Árbol de Extensión y se ve algo como estoSymfony2, Doctrina extensiones del árbol: Generación de un "árbol" -como desplegable Seleccionar lista

id parent_id title lft lvl rgt root 
864 (NULL) Movies 1 0 18 864 
865 864 Packs 2 1 3 864 
866 864 Dubbed 4 1 5 864 

y visualmente de esta manera:

Movies 
| 
| 
|->Packs 
|->Dubbed 

ahora quiero formulario generado para añadir comentarios, y las categorías de carga como lista desplegable para cada película, por lo que tengo en mi película de revisión forma de tipo de clase

public function buildForm(FormBuilder $builder, array $options) 
{ 

    $builder->add('name'); 
    $builder->add('file'); 
    $builder->add('cover'); 
    $builder->add('category','entity',   array('class'=>'Tracker\MembersBundle\Entity\Category', 'property'=>'title',));   
} 

que genera un menú desplegable normal como esto:

enter image description here

¿Cómo puedo configurar mis ajustes del menú, lo que genera un árbol -Como-desplegable seleccionar así?

enter image description here

Respuesta

14

no estoy seguro de que esto es una buena idea: los usuarios no será capaz de escribir en su elección.

no hemos probado esta solución, pero debería funcionar:

En primer lugar, puede ordenar los tres por la raíz y el valor lft para visualizar correctamente, por lo que añadir un generador de consultas:

'query_builder' => function($er) { 
    return $er->createQueryBuilder('c') 
     ->orderBy('c.root', 'ASC') 
     ->addOrderBy('c.lft', 'ASC'); 
}, 

entonces, es necesario agregar un método getIndentedTitle a su entidad:

public function getIndentedTitle() { 
    return str_repeat("--", $this->lvl).$this->title; 
} 

Por último, añadir una opción de alojamiento a sus opciones cuando se genera la forma, para mostrar lo virtual indentedTitle propiedad en lugar de título:

'property' => 'indentedTitle' 

Ver: http://symfony.com/doc/current/reference/forms/types/entity.html

Cuestiones relacionadas