Como crear nuestro propio CRUD en Symfony2

symfony.jpg
Solucionex
14
May 12

Al igual que Symfony1 tenia su generador CRUD, Symfony2 dispone también del mismo. Como es lógico el CRUD de Symfony2 aún no es aún tan potente como el existente en Symfony1, por ello y a modo de introducción, trataremos de explicar en esta entrada como personalizar dicho CRUD.

La personalización del CRUD, nos permitirá ajustar las acciones y plantillas generadas, cada vez que generamos el CRUD basado en un Entity de nuestro modelo de datos.

Para aquellos que no este familiarizados con este proceso, pueden obtener más información aquí.

Si no disponemos de un bundle donde ubicar nuestro CRUD, generaremos uno con el comando: 

php app/console generate:bundle

Y seguiremos las instrucciones para ello. Tanto si utilizamos un bundle existente como si lo generamos nuevo, debemos crear en su interior una carpeta con el nombre:

Command

Tras ello ubicaremos la clase comando que nos permitira correr el correspondiente comando para la genración de nuestro CRUD:

 

<?php
//src/Slx/CrudGeneratorBundle/Command/MyDoctrineCrudCommand.php

namespace Slx\CrudGeneratorBundle\Command;

use Sensio\Bundle\GeneratorBundle\Generator\DoctrineCrudGenerator;

class SlxCrudCommand extends \Sensio\Bundle\GeneratorBundle\Command\GenerateDoctrineCrudCommand
{
    protected function configure()
    {
        parent::configure();
        $this->setName('slx:generate:crud');
    }

    protected function getGenerator()
    {
        $generator = new DoctrineCrudGenerator($this->getContainer()->get('filesystem'), __DIR__.'/../Resources/crud');
        $this->setGenerator($generator);
        return parent::getGenerator();
    }
}
 
Nos situaremos en la carpeta Resources de nuestro bundle, crearemos una carpeta crud y dentro de ella copiaremos el contenido del CRUD de Symfony, situado en: 
 
vendor/bundles/Sensio/Bundle/GeneratorBundle/Resources/skeleton/crud
 
Nuestros primeros niveles de carpeta del bundle deberían quedar así:
 
CrudGeneratorBundle/
  Command/
    SlxCrudCommand.php
  Controller/
  DependencyInjection/
  Resources/
    crud/
      actions/
      config/
      test/
      views/
    ...
 
Dentro de la carpeta crud/actions/  encontraremos un fichero por cada una de las acciones del crud, podremos ajustarlas a nuestras necesidades: incluir paginación, filtros...
 
Dentro de Views, entraremos la parte correspondiente  a la vista del CRUD, dentro de ella estarán las platillas correspondientes a la creación, listado y vista del registro correspondiente. Al igual que las acciones, podremos modificarlas para adaptarlas a nuestras necesidades.
 
Debemos poner especial atención a la notación Twig necesaria para imprimir sentencias Twig. Por ejemplo, para definir un bloque harbía que hacerlo del siguiente modo:
 
{{ "{% block container %}" }}
 
{{ "{% endblock %}" }}
 
Como podemos observar la definición del bloque queda encerrada entre {{ "" }}