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 {{ "" }}