Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Select con grupos de opciones

16 de octubre de 2015

Hola que tal? Les hago una consulta, estoy tratando de crear un <select> con opciones agrupadas para barrios. Es decir:

<select name="" id="">
    <optgroup label="Córdoba">
        <option value="Villa Carlos Paz"></option>
        <option value="San Francisco"></option>
        <option value="Unquillo"></option>
    </optgroup>
    <optgroup label="Buenos Aires">
        <option value="Palermo"></option>
        <option value="Mitre"></option>
    </optgroup>
</select>

Leí que el cookbook dice que hay que usar las opciones:

  • choices
  • group_by

Pero la verdad no se que estoy haciendo mal, porque me sale el error:

Attempted to call function "add" from namespace "EM\AdministracionBundle\Form".

Mi código es:

$builder
    ->add('nombre')
    ->add('descripcion')
    //->add('ciudad')
    -add('ciudad', 'entity', array(
        'class'=>'AdministracionBundle:Ciudad',
        'choices' => $this->getCiudadesPorProvincia(),
        'group_by'=> 'ciudad.getProvincia.nombre',  // acá no se muy bien como especificar que sea el nombre de la provincia.
        'empty_value' => 'Seleccione una Ciudad'
    ))

El método getCiudadesPorProvincia() devuelve:

array (size=25)
  'Buenos Aires' => 
    object(Doctrine\ORM\PersistentCollection)[794]
    ...
  'Córdoba' =>
    object(Doctrine\ORM\PersistentCollection)[794]
    ...

La relación entre mis entidades es:

País 1 -> 1..* Provincia 1 -> 1..* Ciudades 1 -> 1..* Barrios

Respuestas

#1

No se si es un error al copiar+pegar el código, pero esta línea está mal:

-add('ciudad', 'entity', array(

Debería ser:

->add('ciudad', 'entity', array(

@javiereguiluz

21 octubre 2015, 8:41
#2

Estoy retomando este tema y sigo tendiendo problemas! :(

¿Cuál podría ser la sintaxys correcta para tener un select con option group?

Ya corregí el "->add"

el código que tengo es:

$builder
            ->add('nombre')
            ->add('descripcion')
            ->add('ciudad', 'entity', array(
                'class'=>'GeografiaBundle:Ciudad',
                'choices' => $this->getCiudadesPorProvincia(),
                'group_by'=>'ciudad.provincia.nombre'
            ))

Cuando cargo mi ABM de barrios, symfony me devuelve:

Entities passed to the choice field must be managed. Maybe persist them in the entity manager?

No logro entender bien el error y como solucionarlo! :S

Estoy haciendo algo mal ? cómo debería ser ?

Gracias!

@MrXXX0323

3 noviembre 2015, 17:49
#3

Quizás puedes echar un vistazo a los issues del repositorio de Symfony porque se que se han reportado muchos errores relacionados con los "choice": https://github.com/symfony/symfony/issues?utf8=%E2%9C%93&q=is%3Aissue+choice

Además, aunque no se si te afecta en tu caso, en Symfony 2.7 el tipo choice ha cambiado por completo: New in Symfony 2.7: Choice form type refactorization

@javiereguiluz

3 noviembre 2015, 18:13