©2025 Escuela Tecnologías de la Información S.L. Todos los derechos reservados.
Curso de Creación y Publicación de Packages en PHP
Crea y publica packages en Packagist para PHP, instalables vía Composer, con sus pruebas unitarias y flujos de CI
Inscripciones abiertas
Próxima entrega
Si te dedicas al desarrollo profesional con PHP estamos seguros que usarás Composer para la gestión de las dependencias. Si no conoces esta herramienta, deberías empezar por ahí. La verás usar en prácticamente todos los cursos de PHP impartidos en EscuelaIT, ya que es un conocimiento básico y esencial para el desarrollo moderno.
Sin embargo, aunque la mayoría usemos Composer, no todo el mundo tiene el conocimiento necesario para publicar sus packages, con código de base que usa proyecto tras proyecto. En la mayoría de los casos acabamos copiando y pegando archivos que nos viene bien reutilizar de un proyecto a otro.
Publicar packages en Packagist puede ser una excelente experiencia, no solo para facilitar el desarrollo de los proyectos con código de base que tendrás al alcance de un simple comando de consola (composer require), sino también una oportunidad de mejorar tu perfil como desarrollador, publicando software libre para que la comunidad lo pueda usar.
En este curso verás que el proceso para publicar un package no es complicado y en poco tiempo lo puedes tener listo. Lo que sí requiere un poco más de tiempo es crear un package bien diseñado, con una estructura correcta, sus pruebas del software, los sistemas de CI y todo lo que necesitas para mantener los estándares de calidad que requiere un proyecto de software libre. Todo eso lo podrás aprender en este curso de creación de paquetes en Composer.
Sin embargo, aunque la mayoría usemos Composer, no todo el mundo tiene el conocimiento necesario para publicar sus packages, con código de base que usa proyecto tras proyecto. En la mayoría de los casos acabamos copiando y pegando archivos que nos viene bien reutilizar de un proyecto a otro.
Publicar packages en Packagist puede ser una excelente experiencia, no solo para facilitar el desarrollo de los proyectos con código de base que tendrás al alcance de un simple comando de consola (composer require), sino también una oportunidad de mejorar tu perfil como desarrollador, publicando software libre para que la comunidad lo pueda usar.
En este curso verás que el proceso para publicar un package no es complicado y en poco tiempo lo puedes tener listo. Lo que sí requiere un poco más de tiempo es crear un package bien diseñado, con una estructura correcta, sus pruebas del software, los sistemas de CI y todo lo que necesitas para mantener los estándares de calidad que requiere un proyecto de software libre. Todo eso lo podrás aprender en este curso de creación de paquetes en Composer.
Qué aprenderé en el Curso de Creación y Publicación de Packages en PHP
Objetivos del curso
Desarrollar packages para publicar en Packagist, de modo que se puedan instalar en cualquier proyecto PHP mediante Composer. Desarrollar las pruebas del software de los packages y mantener un enfoque dirigido por pruebas con PHPUnit, para llegar a un diseño correcto usando técnicas de Refactoring. Correr las pruebas automáticamente con un enfoque CI usando GitHub Actions y gestionar las versiones para publicar los packages en Packagist con cada nueva actualización.
Por qué debes aprender creación y publicación de Packages en PHP
Qué tengo que saber
Es necesario sobre todo tener un conocimiento sólido sobre el lenguaje PHP.
Además en este curso veremos pruebas con PHPUnit y haremos uso del sistema de control de versiones Git y el servicio de GitHub, por lo que sería ideal tener también algunos conocimientos sobre estas herramientas.
Clases y contenidos
En este vídeo hacemos un resumen de los contenidos y objetivos que vamos a abordar durante el curso, en las distintas disciplinas que abarcamos, desde el desarrollo con PHP, las pruebas, el diseño del software y las operaciones DevOps.
Creación de package para Composer desde cero
Comenzamos nuestro primer proyecto del curso, un package para crear contraseñas de manera aleatoria basadas en una configuración definida por el desarrollador. Veremos los pasos necesarios para crear el package, las pruebas y configurar el composer.json.
Cómo inicializar la creación de un proyecto que pretendemos publicar en Packagist, con el comando composer init. Explicamos cómo realizar la configuración inicial del proyecto.
Creamos la clase en cuestión que será la principal en nuestro proyecto, con su espacio de nombres (namespace) y las convenciones necesarias para que funcione en el marco de un package de Composer.
Veremos cómo inicializar el repositorio Git para el control de versiones, que será necesario para publicar el package y configurar los flujos de trabajo. Además daremos unas notas sobre el trabajo con "helpers" que podrías tener en tu package con funciones globales, que no necesitamos, pero que te contamos por si acaso tú las quieres crear en un package.
Todo package profesional debería tener sus propios tests. En este vídeo te explicamos cómo hacerlos y cómo configurar los namespaces específicos para desarrollo y para los test.
Añadimos nuevos test al proyecto para completar nuestros casos de prueba, a fin de tener un package suficientemente robusto.
La idea de este package es crear claves que puedan personalizarse mediante código. En este vídeo veremos cómo crear un API fluída para que el uso de la clase sea muy sencillo e intuitivo, con el que podemos definir las características de la clave que se debe generar.
Cómo iniciar un nuevo proyecto que pretendemos publicar en un package en Packagist. Entender el sistema de autoload, los namespaces que debemos configurar, la estructura del proyecto que se espera, etc.
Publicar un package en Packagist
Para que el package se pueda instalar vía Composer debemos publicarlo en Packagist. En los próximos vídeos veremos paso por paso cómo conseguir esta subida del package y cómo actualizar las versiones cuando sea necesario.
Antes de comenzar el proceso para publicar el package vamos a conocer algunos detalles de Packagist, que es el sitio que sirve de repositorio de paquetes open source desarrollados en PHP. Veremos algunas cosas interesantes sobre la documentación que nos entregan para explicar el proceso.
En este vídeo vamos a subir el package a Packagist para que esté disponible ya para la comunidad de desarrolladores PHP. Veremos que es un proceso muy sencillo y veremos que, si hemos creado nuestra cuenta de Packagist con nuestro usuario de GitHub se define automáticamente el webhook necesario para que Packagist actualice el paquete cada vez que se cambia la release.
En este vídeo veremos el proceso para actualizar el package, que consiste en crear una nueva tag en el repositorio Git y luego crear una release en GitHub con el mismo nombre. Una vez configurada, si hemos hecho bien el hook, la actualización es automática.
Comenzar un package de validación en PHP
Vamos a construir un segundo proyecto en este curso, más complejo que el anterior y que requerirá tener una jerarquía de clases y un diseño que permita su modularidad, extensibilidad y un fácil mantenimiento. Este segundo proyecto lo vamos a desarrollar además siguiendo el flujo de TDD.
Comenzamos el proyecto de librería de validación para PHP, con la inicialización del proyecto y los namespace para el código de las clases y para el código de test.
En este segundo proyecto de package vamos a aplicar un flujo de trabajo dirigido por pruebas, lo que sería el TDD. Veremos cómo vamos desarrollando el software siguiendo esta metodología.
Vamos avanzando en el proyecto añadiendo reglas de validación, que básicamente es cómo va a escalar nuestro package. Veremos cómo aplicar la nueva regla y explicaremos cómo este código puede transformarse en un problema más adelante cuando tengamos decenas de reglas.
Cómo vamos a gestionar las reglas de validación desconocidas. Explicamos cómo se pueden levantar excepciones para asegurarnos que nadie nos llama mal y cómo podemos testear que estas excepciones ocurren.
Cómo aplicar mejoras en nuestra biblioteca de validación para que también se pueda informar a quienes usan el package sobre los problemas encontrados al validar los datos.
Refactorización y aplicación de patrones
En los siguientes vídeos vamos a iniciar una serie de refactorizaciones para mejora del diseño de la biblioteca de validación y de los test unitarios de las clases.
Vamos a aplicar una mejora en la biblioteca de validación para conseguir mejorar el diseño, aplicando una mejor modularidad del software. Comenzamos convirtiendo cada método de validación de una regla particular en una clase.
En esta refactorización vamos a aplicar unas mejoras de un par de patrones conocidos. Vamos a crear una factoría para construir los objetos de validación y aplicar a la vez el patrón strategy, que conseguimos por haber puesto cada regla en su propia clase.
Aplicamos la herramienta de los "data provider" que nos ofrece PHPUnit para mejorar la sencillez de los test y evitar escribir una y otra vez test que son prácticamente copiados de otros, lo que también impactará positivamente en la escalabilidad de las pruebas.
Crear reglas simples, parametrizadas y validador compuesto
Vamos a extender el código de la biblioteca creando reglas de validación simples y reglas de validación parametrizadas, para lo que necesitaremos nuevas maneras de proceder a la hora de parsear las reglas. Además vamos a hacer ya el validador compuesto, que permitiría no solamente validar campos sueltos, sino todo un array asociativo de datos de distintos campos.
Creamos una regla simple para mostrar lo sencillo que es ahora crear los métodos de test gracias a los data providers.
En esta ocasión vamos a crear reglas un poquito más complejas para poder resolver temas que más tarde o más temprano debería gestionar nuestra biblioteca de validación. Para ello veremos cómo crear reglas parametrizadas.
Vamos a parar un momento la extensión para refactorizar el sistema de parseado de reglas de validación, creando una nueva clase que se especializará en esta tarea. Esta tarea es una refactorización para mejora del diseño, ya que no vamos a cambiar el API ni la funcionalidad.
En este vídeo completamos la funcionalidad de nuestra biblioteca de validación, creando un método que nos permite validar un array asociativo de datos de campos, como el típico que nos llegaría por formulario con $_POST o por querystring con $_GET. Con esto terminaremos, al menos por el momento, de ampliar la funcionalidad de la librería y podremos pasar a definir nuestro sistema de integración continua.
Implementar la Integración Continua
En los siguientes vídeos vamos a publicar el package en Packagist pero en esta ocasión queremos crear un sistema de CI (Continuous Integration) que nos permita correr las pruebas de manera automática cuando se producen los push o pull request a la rama main. Para ello vamos a usar GitHub Actions.
Explicamos los objetivos de esta etapa del curso: implementar un sistema de CI mediante GitHub Actions. Comenzamos por publicar este nuevo paquete en packagist, algo que haremos rápidamente porque ya conocimos el proceso en el vídeo anterior.
Creamos la primera versión del pipeline de integración continua, lo que se llama workflow en el contexto de GitHub Actions. Realizaremos una implementación sencilla para mantener las cosas simples y veremos cómo se ejecuta en GitHub, resolviendo posibles problemas típicos que nos podemos encontrar en el proceso.
De una manera simple podemos construir una matriz de versiones de PHP, que luego podemos usar para que nuestros jobs se ejecuten en cada una de ellas, de modo que podamos asegurar la compatibilidad del package en distintas versiones del lenguaje.
¿Conoces nuestra tarifa plana?
Toda la formación de EscuelaIT, con más de 200 cursos completos para aprender las más variadas tecnologías de programación, diseño y marketing online. Todo! con tu suscripción.