Comunidad de diseño web y desarrollo en internet online

Controlador padre CRUD con reflection en Symfony2

Citar            
MensajeEscrito el 15 Nov 2013 03:23 pm
En esta entrada se explicará como crear un controlador padre para las operaciones básicas de CRUD en symfony2 usando reflection y convenciones de nombres, antes de comenzar este tutorial es para un público con conocimientos medios sobre poo, php y symfony2, utilizaremos la clase reflection de php y codificaremos e implementaremos una interfaz para definir un método global initialize que será llamado justo antes de todas las acciones del controlador, bueno manos a la obra.

Antes que nada deshilemos el problema, necesitamos crear un contrlador donde se definan todos los métodos necesarios para hacer funcionar un CRUD, este será heredado por los controladores respectivos de las entidades que tengamos definidas, por esta razón el controlador necesitará saber de alguna manera con que entidad está trabajando, la estrategia que usaremos será definir una convención de nombre simple para que con reflection podamos decirle al controlador con que entidad está trabajando, pero debemos tener en cuenta el uso de los namespaces en php 5.3+ así que nuestro controlador padre deberá tener un método preAction para ahí poder cargarle toda la información necesaria para poder trabajar con cualquier entidad. Basicamente haremos uso de las siguientes herramientas de Symfony2.



Initializable Interface

Events Listeners

Definicion de Servicios en Symfony2



1) Codificando nuestra interface: Nuestra interface initializable constará de un único método llamado initialize que es el método que será ejecutado justo después del constructor del controlador.

InitializableControllerInterface

2) Codificando nuestro evento:

BeforeControllerActionListener

Como podemos observar en nuestro evento se llama a la función initialize que fue definida en nuestra interface, se aplican algunas bifurcaciones para asegurarnos de que solo manejaremos a los controladores que implementan la interface InitializableControllerInterface

3) Ahora definiremos nuestro servicio EntityReflectionGuesser, el cual será responsable de definir el nombre de nuestra entidad usando reflection.

EntityReflectionGuesser

Ahora con respecto a la convención que usaremos, será la siguiente. Simplemente nombraremos a nuestros contrladores con el nombre de la entidad respectiva, por ejemplo si deseamos hacer un controlador para manejar la entidad Item, entonces nombraremos a nuestro controlador ItemController. Ahora definiremos nuestro controlador padre

CrudController

Ya con nuestro controlador padre definido programar un CRUD a una entidad debería ser tan simple como el siguiente ejemplo.

ItemController

por último solo nos falta definir nuestros servicios en el archivo de configuración de nuestro bundle

services.yml

Bueno esto es todo, cualquier duda o sugerencia no duden en comentar, decidí usar gist por practicidad, de hecho deberían habilitar el uso de gist y pastebin. Para complementar este funcionalidad que acabamos de crear pudieramos modificar el generador de symfony2 para que trabaje con nuestro controlador padre, también configurarle twitter bootstrap a nuestras plantillas y con eso tendriamos una muy poderosa herramienta de desarrollo.

Por metalvarez

83 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Nov 2013 09:41 pm
Hola metalvarez, gracias por el aporte. Debes colocar el código en el post. Con los enlaces al código la verdad es muy incómodo seguir la explicación del tutorial.

Igualmente tendremos en cuenta tu sugerencia, pero mientras necesitaremos que coloques el código en el post.

saludos!

Por Mariux

BOFH

7756 de clabLevel

28 tutoriales
15 articulos

Genero:Femenino   Héroes Editores

Diseñadora & ilustradora

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.