Qué son y cómo crear tus propios service providers

Los services providers permiten registrar servicios, middleware, event routes, etc. bajo una estructura de «Programacion Orientada a Objetos» de tal manera que pueden ser usados para configurar nuestras aplicaciones. Por ejemplo Laravel  trae consigo por defecto algunos service providers que podemos utilizar, editar y reusar, pero en la lección de hoy aprenderemos como crear un nuevo service provider, no solo para Laravel sino para cualquier proyecto de PHP.

Los service provider nos permiten entre otras cosas reutilizar parte del código ya creado para que se pueda extender la funcionalidad de cualquier componente dentro del proyecto; lo cuál nos hace tener un código más flexible así como más fácil de escalar y mantener al mediano y largo plazo.

Regístrate para ver ésta y cientos de lecciones exclusivas.

Creación de una clase Facade genérica

Esta es una nueva lección de la segunda parte de nuestro curso Crea componentes para PHP y Laravel , en esta clase aprenderás a crear una clase genérica que pueda ser implementada para crear un Facade en nuestro proyecto, pero ¿ Por qué hacer uso de una clase genérica ? Bien, nuestro proyecto es relativamente sencillo, simplemente necesitamos crear un método para una clase y haremos uso de un Facade, pero cuando tenemos un sistema un poco más complejo debemos crear una solución más genérica que permita crear e implementar todos los Facades que necesitemos de una forma más optima.

Vamos a crear esta clase genérica para implementar un nuevo Facade para nuestro Access Handler, pero va a ser lo suficientemente versátil para poder ser usada posteriormente en caso de ser necesario, no sólo para el Access Handler sino para cualquier otra clase del proyecto.

Regístrate para ver ésta y cientos de lecciones exclusivas.

Compartir instancias dentro del contenedor de inyección de dependencias (singleton)

En la lección anterior sobre Singleton, aprendimos que en realidad es un anti patrón que limita y hasta daña el diseño del código de nuestras clases o incluso de toda la aplicación como tal.

Pero es cierto que muchas veces solamente necesitamos una instancia, de las clases con las que estamos trabajando. Especialmente si estás creando o utilizando clases como las que incluye el framework Laravel como por ejemplo: Session Managers, Authenticators, Database, etc.

En este escenario no creamos o implementamos singleton directamente en cada clase, dado que no es correcto como ya aprendimos, sino que por el contrario nos apoyamos una vez más en el contenedor de inyección de dependencias, como aprenderemos en la clase de hoy:

Regístrate para ver ésta y cientos de lecciones exclusivas.

El patrón ¿o anti patrón? Singleton

Continuando con nuestro Curso de creación de componentes para PHP y Laravel, en la lección de hoy aprenderemos sobre los patrones de diseño, específicamente el patrón (o también llamado anti patrón) Singleton pero ¿Qué es un patrón de diseño?.

Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.

Los patrones de diseño se utilizan con la finalidad de estandarizar la forma en que desarrollamos el código ofreciendo soluciones reusables. Es importante señalar que el uso e implementación de un patrón de diseño no es obligatorio, pero en algunos casos es recomendado como parte de las buenas prácticas.

En este caso, cómo lo mencionaba anteriormente veremos qué es y como implementar el patrón Singleton.

Su intención consiste en garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella.

Regístrate para ver ésta y cientos de lecciones exclusivas.

Paso de argumentos a través del contenedor de inyección de dependencias

Hoy en día, frameworks como Symfony o Laravel trabajan para que sus componentes sean lo más desacoplados que sea posible, y pueda reemplazarse la implementación de ciertas clases por otra. Logrando así un código más escalable y flexible. Para ello, ambos frameworks se apoyan muchísimo en el patrón de inyección de dependencias. Este patron es tan importante, que hemos dedicado toda la parte 2 de nuestro curso de creación de componentes para PHP y Laravel, a hablar de él, incluso ¡Estamos creando nuestro propio contenedor de inyección de dependencias!

Con el patrón de inyección de dependencias, los objetos, de los cuales una clase depende, son inyectados a través del constructor o de métodos setters. Pero no todas las clases dependen únicamente de otras clases, muchas veces, por ejemplo, cuando utilizamos una clase para conectarnos a una base de datos o API, esta necesita de valores escalares, como pueden ser las cadenas para conectarse a una URL o host, un nombre de usuario y una clave.

El día de hoy implementaremos este feature dentro de nuestro contenedor, mientras aprendemos más sobre el uso de Reflection en PHP.

Regístrate para ver ésta y cientos de lecciones exclusivas.

Creación y uso de excepciones personalizadas con PHP y PHPUnit

Esta lección forma parte del curso avanzado de creación de componentes para PHP y Laravel,

Una excepción es un evento inesperado que ocurre durante la ejecución de un programa e interrumpe la ejecución normal del mismo.

Una excepción es lanzada desde un método cuando las condiciones para la ejecución normal de dicho método no se cumplen, y luego puede ser atrapada en algún lugar del sistema utilizando un bloque try / catch.

La idea cuando estamos creando nuestros métodos y necesitamos crear una excepción, es crear una clase personalizada cuyo nombre debe describir qué componente produjo el error o cuál fue el error.

Además, aunque se produzca una excepción no «atrapada» en nuestro código, podemos, de igual forma, escribir una prueba con PHPUnit para probar este comportamiento.

Todo esto lo veremos en detalle en la lección de hoy:

Regístrate para ver ésta y cientos de lecciones exclusivas.

Resolución automática de clases usando Reflection de PHP

Si estás siguiendo este curso, muy probablemente ya te guste PHP; aún así, es difícil ignorar la gran cantidad de críticas que ha recibido este lenguaje desde hace varios años.

Pero estoy convencido de que el 99% de esas personas sólo conocieron PHP 4, quizás un poco de PHP 5.0, y no tienen ni idea de las novedades de PHP 7 o de features como el que aprenderemos en la clase de hoy.

En esta clase, vamos a aprender sobre el uso de Reflection con PHP, el cuál nos provee de un API para hacerle ingeniería inversa a nuestras clases.

Con las diferentes clases provistas por Reflection como: ReflectionClass, ReflectionMethod, ReflectionParameter, entre otras, vamos a poder obtener toda la información de las clases, objetos, funciones métodos, inclusive comentarios de nuestra aplicación. Por ejemplo, ¿Tiene esta clase o no un constructor? ¿Requiere este método o no de parámetros y cuáles son? Etc.

Laravel, utiliza este feature de PHP para implementar la resolución automática de clases, a través de su contenedor de inyección de dependencias; es decir, hace posible que un controlador como éste (que vimos en el curso crea tu primera aplicación con Laravel), sea instanciado automáticamente por el framework -a pesar de sus dependencias- y obtengamos el TicketRepository ya cargado como por arte de magia:

class TicketsController extends Controller {

    private $ticketRepository;

    public function __construct(TicketRepository $ticketRepository)
    {
        $this->ticketRepository = $ticketRepository;
    }

}

Pero no es magia y hoy te enseñaré exactamente cómo funciona ¿Estás listo?

Regístrate para ver ésta y cientos de lecciones exclusivas.

Creación de un contenedor de inyección de dependencias para PHP

Bienvenidos a la cuarta lección de la segunda parte de este Curso de creación de componentes para PHP y Laravel, en esta ocasión vamos a aprender a crear un contenedor de inyección de dependencias que pueda ser reusado en cualquiera de nuestros proyectos.

Conocimientos previos

En esta lección, primero crearemos el diseño del código escribiendo las pruebas unitarias con PHPUnit, y a partir allí iniciaremos el desarrollo del código, por ello te recomendamos que hayas visto la parte 1 de este mismo curso, antes de continuar.

Regístrate para ver ésta y cientos de lecciones exclusivas.

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Suscríbete a nuestro boletín

Recibe consejos útiles, promos y múltiples recursos directamente en tu correo.

Tu nombre y correo serán enviados directamente a MailChimp. No compartiremos tus datos con otras empresas.