Silex: Idiorm y Paris Provider

Volvemos a la serie de artículos con Silex y en esta ocasión vamos a usar Idiorm y Paris. Esta librería nos proporciona un ORM ligero con el que podremos trabajar con modelos en la capa de persistencia.

Idiorm y Paris

Idiorm is an object-relational mapper and fluent query builder.

Idiorm nos permitirá trabajar más fácilmente con las tablas y las relaciones:

Paris is an Active Record implementation based on Idiorm.

Paris nos permitirá trabajar con modelos:

Dicho esto, vamos a añadirlo a Silex mediante un Provider para facilitarnos algunas tareas.

SilexServiceProvider

Lo primero es leer la documentación para ver cómo se usaría en un proyecto y vemos que podemos incluir las librerías con Composer, por lo tanto nuestro fichero composer.json del Provider tendrá la siguiente línea:

La clase que implementa ServiceProviderInterface es la siguiente:

El provider lo que hace es registrar un servicio llamado paris y otro llamado paris.db, cuando se llaman a estos servicios realiza la conexión a la base de datos con los parámetros de la conexión (idiorm.config). También si se ha definido un prefijo para los modelos se aplica.

Cuando llamamos al servicio paris, éste devuelve un servicio que no es nada más que la siguiente clase:

Este servicio nos permitirá trabajar con los modelos.

Ya tenemos la parte del provider, ahora falta usarlo en nuestro proyecto.

Usando ParisServiceProvider

La idea es cambiar los datos que ahora mismo se generan aleatoriamente en cada petición para que se generen sólo una vez y se almacenen en la base de datos. Usaremos los modelos User y Address:

 Silex: Idiorm y Paris Provider

Lo primero que hacemos es añadir el provider al fichero composer.json:

Actualizamos los vendors y registramos el provider en app.php:

Vamos a usar una base de datos sqlite e indicamos que el prefijo para los modelos será SMTC\Silex\Model. Creamos los modelos, User.php:

Address.php:

Ya tenemos todo lo necesario para trabajar con la librería.

Lo siguiente será rellenar la base de datos, para ello nos creamos un script load_fixtures.php:

Lanzando el script tendremos los datos almacenados en la base de datos.

Para facilitar las cosas crearemos un UserManager a través del cual gestionaremos las operaciones de los usuarios:

El método findAll obtiene los datos que nos interesan del usuario junto con el nombre de las calles las direcciones que tiene asociadas separadas con el carácter “|“.

Lo registramos en app.php:

Y ya lo tenemos preparado para usar. Sólo queda hacer un par de cambios, el primero en el controller:

Y el otro cambio es en la vista:

Y hasta aquí el artículo de hoy, con idiorm y paris tenemos una capa muy ligera para poder trabajar con la persistencia en nuestros proyectos. Esta librería puede ser una alternativa interesante a otras soluciones más completas y pesadas, todo depende de lo que se necesite.