Desplegable con una relación entre entities en un formulario de Symfony2

mayo 7, 2012

En las entidades de Symfony2 es sencillo relacionar un campo con otra tabla con una relación ManyToOne y que este campo solo pueda tomar un valor que esté disponible en la segunda entity. Si creamos un formulario para poder introducir nuevos registros en la base de datos, necesitamos un campo del tipo select para seleccionar uno de los datos de la segunda tabla y relacionarlos.

Deberemos modificar el formulario y añadirle un par de opciones más. En este ejemplo, vamos a relacionar un usuario con su país.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
namespace AcmeMiBundleForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilder;
 
class PerfilType extends AbstractType {
 
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('pais', 'entity',
            array(
                'class' => 'AcmeMiBundle:Pais'
                'label' => 'Pais',
            )
        );
    }
}

Que no se nos olvide añadir el método __toString() a la entity Pais:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace AcmeMiBundleEntity;
 
use DoctrineORMMapping as ORM;
 
class Pais
{
 
    [...]
 
    public function __toString()
    {
        return $this->getNombre();
    }
}

Y así de sencillo, ahora en nuestra plantilla aparecerá automáticamente el campo de tipo select a la hora de seleccionar el país del usuario.

Tags ; , , , ,

3 comentarios

    Ariel Mar 14, 2013

    Muy bueno estimado, el unico detalles que en:

    ‘class’ => ‘AcmeMiBundle:Pais’
    ‘label’ => ‘Pais’,

    Debe ser:

    ‘class’ => ‘AcmeMiBundle:Pais’,
    ‘label’ => ‘Pais’,

    Con una coma (,) despues de ‘AcmeMiBundle:Pais’

    Por lo demas, funciona perfect, gracias

    Responder
    Rebeca Abr 29, 2013

    GRACIAS!!!!! Vi muchos ejemplos, pero con el tuyo me anduvo a la primera!

    Responder
    Fabian Dic 10, 2015

    pero como le colocas diseno al select esta muy simple y en mi caso utilzo bootstrap

    Responder

Responde a Ariel Cancelar la respuesta

Los comentarios son moderados y se utiliza rel="nofollow" para los enlaces.