Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/03/2016, 06:45
Avatar de cluster28
cluster28
 
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 4 meses
Puntos: 32
Formulario con checkboxes de varios registros de una misma entidad

Tengo esta entidad:

Código PHP:
Ver original
  1. <?php
  2.  
  3. namespace Project\UsuarioBundle\Entity;
  4.  
  5. use Doctrine\ORM\Mapping as ORM;
  6.  
  7. /**
  8.  * Permiso
  9.  *
  10.  * @ORM\Table(name="permisos")
  11.  * @ORM\Entity(repositoryClass="Project\UsuarioBundle\Repository\PermisoRepository")
  12.  */
  13. class Permiso
  14. {
  15.     /**
  16.      * @var int
  17.      *
  18.      * @ORM\Column(name="id", type="integer")
  19.      * @ORM\Id
  20.      * @ORM\GeneratedValue(strategy="AUTO")
  21.      */
  22.     private $id;
  23.  
  24.     /**
  25.      * @var string
  26.      *
  27.      * @ORM\Column(name="tipo", type="string", length=255, unique=true)
  28.      */
  29.     private $tipo;
  30.    
  31.     /**
  32.      * @ORM\ManyToMany(targetEntity="Usuario", mappedBy="permisos")
  33.      */
  34.     private $usuarios;
  35.  
  36.  
  37.     /**
  38.      * Get id
  39.      *
  40.      * @return integer
  41.      */
  42.     public function getId()
  43.     {
  44.         return $this->id;
  45.     }
  46.  
  47.     /**
  48.      * Set tipo
  49.      *
  50.      * @param string $tipo
  51.      * @return Permiso
  52.      */
  53.     public function setTipo($tipo)
  54.     {
  55.         $this->tipo = $tipo;
  56.  
  57.         return $this;
  58.     }
  59.  
  60.     /**
  61.      * Get tipo
  62.      *
  63.      * @return string
  64.      */
  65.     public function getTipo()
  66.     {
  67.         return $this->tipo;
  68.     }
  69.     /**
  70.      * Constructor
  71.      */
  72.     public function __construct()
  73.     {
  74.         $this->usuarios = new \Doctrine\Common\Collections\ArrayCollection();
  75.     }
  76.  
  77.     /**
  78.      * Add usuarios
  79.      *
  80.      * @param \Project\UsuarioBundle\Entity\Usuario $usuarios
  81.      * @return Permiso
  82.      */
  83.     public function addUsuario(\Project\UsuarioBundle\Entity\Usuario $usuarios)
  84.     {
  85.         $this->usuarios[] = $usuarios;
  86.  
  87.         return $this;
  88.     }
  89.  
  90.     /**
  91.      * Remove usuarios
  92.      *
  93.      * @param \Project\UsuarioBundle\Entity\Usuario $usuarios
  94.      */
  95.     public function removeUsuario(\Project\UsuarioBundle\Entity\Usuario $usuarios)
  96.     {
  97.         $this->usuarios->removeElement($usuarios);
  98.     }
  99.  
  100.     /**
  101.      * Get usuarios
  102.      *
  103.      * @return \Doctrine\Common\Collections\Collection
  104.      */
  105.     public function getUsuarios()
  106.     {
  107.         return $this->usuarios;
  108.     }
  109.    
  110.     public function __toString()
  111.     {
  112.         return $this->tipo;
  113.     }
  114. }

Y me gustaría crear un formulario con el componentes Forms que muestre checkbox por cada permiso que tenga en la base de datos. He probado CheckboxType y EntityType pero sólo consigo que me muestre un solo checkbox.

Código PHP:
Ver original
  1. public function buildForm(FormBuilderInterface $builder, array $options)
  2. {
  3.         $em = $this->container->get('doctrine')->getEntityManager();
  4.         $permisos = $em->getRepository('UsuarioBundle:Permiso')->findAll();
  5.        
  6.         foreach($permisos as $permiso){
  7.             $builder
  8.                 ->add(  'id',
  9.                         CheckboxType::class,
  10.                         array(  'label' => $permiso->getTipo()
  11.  
  12.                     )
  13.                 )
  14.             ;
  15.         }
  16. }

Se puede hacer lo quiero?