Trabajando con el inyector de dependencias en PhalconPHP

Trabajando con el inyector de dependencias en PhalconPHP

En este artículo voy a explicar algo que hice hace ya un tiempo en el magnífico framework de PhalconPHP, el cual ya se ha convertido en mi principal base de código en PHP dejando ya algo de lado los desarrollos en CakePHP, que tanto me ha aportado.

PhalconPHP me encanta porque es un framework que trabaja muy rápido, sobre esto podréis leer más en la documentación oficial pero la principal clave de su velocidad se debe a que se instala como módulo de PHP y las librerías core se cargan en RAM.

Adicionalmente comentar que los principales casos de uso en los que he optado por esta solución técnica han sido bajados en microservicios o APIs con un número de endpoints reducidos, con lo que la velocidad de codificación y el rendimiento del servicio han sido valores muy altos, pudiendo desplegar un proyecto (claro está que dependiendo los requerimientos) en un periodo de tiempo muy reducido.

Tal ha sido mi devoción por este software que llevo una pegatina en mi portatil!

El aspecto negativo o la contra ha sido la documentación, escasa y no muy clara. La gran mayoría de los conflictos o problemas con el desconocimiento del framework los he tenido que ir “peleando” con ensayo-error o mediante el no menos fantástico ecosistema de StackOverflow.

 

Como inyectar dependencias y usar funciones ad-hoc como servicios

En este artículo voy a presentar un código de ejemplo funcional de como trabajar con las dependencias y crear un servicio reutilizable por todos los endpoints de nuestra API.

El código en cuestión está publicado en GitHub:
https://github.com/pedroventura/sample-phalconphp-di-service

Demo online:
https://proyectos.pedroventura.com/proyectos/sample-phalconphp-di-service/testIp

Probando mediante Proxy con distintas IPS:

Desde Dallas, USA

Desde Praga, República Checa

Desde New York, USA

El código está basado en una micro instancia de PhalconPHP la cual es con la que principalmente trabajo.

Las partes claves del código serían:

// iniciamos la micro-aplicación de Phalcon para servicios web
$app = new Phalcon\Mvc\Micro();
// inyector de dependencias de Phalcon
$di = new \Phalcon\DI\FactoryDefault();

Hacer el require de nuestro fichero con la función externa:

require_once __DIR__ . '/config/services.php';

Seteamos el inyector de dependencias la aplicación

$app->setDI($di)

Y ya dentro del propio endpoint invocamos la función definida en el servicio

$ipUsuario = $app->di->get('ipUsuario');
$countryCode = $app->di->get('getCountyCode', [$ipUsuario]);

En config/services.php están definidas las funciones que trabajan como un servicio en la aplicación.

En la aplicación de ejemplo estoy creando una función que consulta a la base de datos de IPs por los datos GEO del usuario.
Si alguien está interesado y quiere usar el código tal cual, tiene toda la libertad (está publicado en github y libre de uso ) y está en pleno funcionamiento, tan sólo habrá que descargar el fichero de base de datos directamente desde Maxmind https://dev.maxmind.com/geoip/geoip2/geolite2/. Si es para un entorno en producción habrá que actualizarlo periódicamente.

Espero que haya resultado útil y haya quedado claro la utilización de las dependencias en PhalconPHP, así como el caso de uso asociado al ejemplo de solicitud de datos GEO.

Cualquier duda o pregunta deja un comentario en este artículo. Saludos!

Noticias relacionadas »

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

10$ gratis con Digital Ocean »

Este blog está funcionando con Digital Ocean,
para todos los lectores 10$ gratis! para probar el cloud a través del siguiente enlace.


Ir a Digital Ocean

¡Comparte este artículo! »

Sígueme en Facebook »

  • sdfgsdf sdfgsdf (2 semanas)
    dsfasd sdfas asdf asdfa asdfasdfafa asdfsdewtr fdsfsdfasfwewesfsd sdf ds
  • sdfgsdf sdfgsdf (2 semanas)
    sdfgsdf sdfgsdfgsdf sdfg
  • Luis (1 mes)
    Hola Pedro, muchas gracias por transmitirnos tu conocimiento. Te comento…
  • Senado.es: Vuelta al año 2000 - Yorokobu (1 mes)
    […] desarrollador Pedro Ventura explica en su blog cómo alternativas…
  • Pedro Ventura (1 mes)
    Hola Edwer La manera de como hacerlo viene explicada en…
  • Rodrigo (1 mes)
    Tengo una duda, como hago para no repetir el tweet?…

Suscríbete al newsletter »

Proporciona tu correo electrónico a continuación y recibe las últimas noticias! Funciona con Feedburner de Google

Archivo »

Leer entrada anterior
Cómo y donde comprar Bitcoin, Ethereum o Litecoin

En este artículo voy a resolver una duda que puede tengan muchos lectores y no es otra que cómo y...

Cerrar