Codeigniter,

Codeigniter «Sparks», gestión de paquetes

Codeigniter es un framework PHP que va creciendo según avanzan sus versiones y va alcanzando unos niveles considerables de madurez. Una de las carencias que tenía hasta ahora es la falta de un gestor de paquetes que permitiera bajarse del repositorio las librerías que fueramos a usar en nuestros proyectos. Algo como tienen otros frameworks de otros llenguajes, como las ‘gems’ de ruby.

Resulta engorroso hacerlo de forma manual: bajar el zip, integrar config, libraries, helpers, pegar código, etc… Todo esto se puede hacer desde la linea de comandos de la consola. Sparks es el nombre de nuestro gestor de paquetes en Codeigniter. Vamos a verlo paso a paso, desde la instalación a la creación de algún ‘Spark’ de ejemplo.

1. Instalación de «Sparks», el gestor de paquetes

Partimos de una instalación limpia de Codeigniter para instalar Sparks. Teniendo en cuenta que estamos en /var/www/codeigniter, ejecutamos desde CLI lo siguiente:

php -r «$(curl -fsSL http://getsparks.org/go-sparks)»

Pantallazo 1: Instalacion de Sparks.

Lo que hace la utilidad desde la linea de comandos es preparar codeigniter para Sparks, básicamente haciendo lo siguiente:

  • Crea un directorio llamado sparks
  • Prepara una clase Loader en  application/core/MY_Loader.php
En este momento, ya tenemos Codeigniter listo para descargar paquetes y usarlos en nuestros proyectos. Para comprobarlo, desde /var/www/codeigniter, vamos a lanzar la help de la linea de comandos:

php tools/spark help

  • install # Install a spark
  • reinstall # Reinstall a spark
  • remove # Remove a spark
  • list # List installed sparks
  • search # Search for a spark
  • sources # Display the spark source URL(s)
  • version # Display the installed spark version
  • help # This message

2. Comprendiendo la estructura de un Spark

El fichero spark.info tiene una estructura para leer datos de nuestros paquetes y así poder saber si es compatible con una version de Codeigniter, ser buscado o conocer sus dependencias. Es la siguiente:
  • name: twitter_api
  • version: 0.0.1
  • compatibility: 2.0.2
  • dependencies: oauth2: 0.1.1
  • tags: [«twitter»,»api»,»social»]
En este ejemplo de spark.info, vemos que nuestro spark se llama twitter_api y su versión es la 0.0.1. Tiene compatibilidad con Codeigniter a partir de la 2.0.2 y depende de Oauth2 versión 0.1.1. Los tags sirven para que podamos buscarlo. Este fichero spark.info lo generamos al crear el spark, así como los directorios que vayamos a usar dentro (los que podamos necesitar). Dentro de /var/www/CodeIgniter/sparks/twitter_api/ tenemos otro directorio que determina la versión (0.0.1) y dentro de versión, el resto. Así pues, siempre tendremos una estructura spark/versión.

Dentro de spark/version, hay:

  • config
  • helpers
  • libraries
  • views
Esto ya os resultará más familiar ya que corresponde a una estructura típica de una app en codeigniter. Lo que hace el Loader mencionado al principio es, de alguna manera, incluir también estos ficheros para que desde nuestro ‘controller’ tradicional podamos hacerlo compatible sin ningún esfuerzo. Esa es la magia.

3. Instalando paquetes: Oauth2 de Codeigniter

Desde la línea de comandos tecleamos php tools/spark install oauth2 y ya tenemos disponible oauth2 en nuestros proyectos.
La llamada desde nuestro controller (en /var/www/codeigiter/app/controllers/controller.php) la hacemos desde cualquier método del mismo:
$this->load->spark('twitter_api/0.0.1');
$this->load->helper(‘twitter_api’);
$this->twitter_api->publish();
4. ¿No os parece que nos falta algo?
Sí, compatibilidad con HMVC. Según he podido ver no es demasiado complicado añadirlo, basta añadir al Loader el mecasnimo para ‘modules’ existente y alguna cosa más. Creo que lo van a añadir en próximas versiones de CI, tanto Spark como spark con HMVC.
5. Conclusiones
Codeigniter ahora tiene la capacidad de integrar aquellas piezas que no s sean útiles para hacer nuestro día a día mejor y más extendido. Sólo le veo un pequeño inconveniente que se resolverá a futuro: no tiene soporte modular con HMVC, aunque esto lo podemos hacer nosotros mismos, leyendo un poquito de código.
6. Referencias