Crear librería en PHP instalable con Composer
A medida que aumentas tu nivel como desarrollador y vas creando funcionalidades en uno y otro proyecto, te das cuenta que bien podrías crear una librería centralizada e instalarla en todos tus demás proyectos. Esta librería podría ser privada o pública, pero la idea central es que sea un proyecto de código independiente, mantenible y centralizado. Es por esto que hoy veremos cómo crear una librería PHP que puedas fácilmente instalar en todos tus proyectos.
Requerimientos
Para poder desarrollar este tutorial, es necesario que cumplas con lo siguiente:
- Tener instalado Composer de manera global
- Haber creado una cuenta en Packagist
- Tener una cuenta en GitHub
Creación del archivo composer.json
Lo primero que debes hacer es crear un repositorio nuevo en GitHub. Para efectos de este tutorial vamos a suponer que creaste el repositorio proyecto/mi-repo. Después de esto vas a descargar de manera local tu proyecto.
git clone git@github.com:proyecto/mi-repo.git
Ingresas a tu repo en la consola de tu sistema operativo y ejecutas el siguiente comando de composer.
composer init
Inmediatamene después de esto composer te solicitará algunos datos de manera interactiva como el vendor name, la descripción y otros datos relevantes. Al final, obtendrás una respuesta similar a la siguiente:
Package name (<vendor>/<name>) [tu_usuario/mi-repo]: proyecto/mi-repo
Description []: Escribe aquí una descripción corta y concisa
Author [Tu nombre <tu_correo>, n to skip]:
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []: library
License []: MIT
Define your dependencies.
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
...
Do you confirm generation [yes]? yes
Would you like the vendor directory added to your .gitignore [yes]? yes
Después de esto composer creará un archivo llamado composer.json similar al siguiente:
{
"name": "proyecto/mi-repo",
"description": "Escribe aquí una descripción corta y concisa",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "Tu nombre",
"email": "tu_correo@gmail.com"
}
],
"require": {}
}
Adicional, si escribiste yes en la última pregunta acerca del gitignore obtendrás el archivo .gitignore con el siguiente contenido:
/vendor/
Creación del código
Por supuesto, debes crear el código de tu proyecto. Por lo general las librerías suelen guardar el código en una carpeta llamada src. Tu eres libre de decidir si haces esto y encapsulas todo tú código allí, o creas una carpeta por cada namespaces en la raíz del proyecto. Dependiendo de la opción que elijas, así mismo deberás configurar el autoloader de clases en el archivo composer.json.
Para efectos de este tutorial, vamos a suponer que creaste la carpeta src y adentro creaste la siguiente clase en el archivo Calculator.php:
namespace Proyecto\Math;
class Calculator
{
public function sum($a, $b)
{
return $a + $b;
}
}
Nota que aunque no hemos creado ninguna carpeta dentro de src tenemos un namespace en nuestra clase Calculator.
Carga de clases con PSR autoloader
Esta parte es esencial para nuestro proyecto, pues si no se hace bien de nada servirá que instalemos nuestra librería en otros proyectos. De acuerdo a la clase que creamos anteriormente deberíamos agregar lo siguiente al archivo composer.json para que se puedan cargar las clases de manera satisfactoria.
"autoload": {
"psr-4": {
"Proyecto\\Math\\": "src/"
}
}
Agrega un scaffolding para pruebas unitarias (opcional)
Agregar pruebas unitarias a tu proyecto seguramente te diferenciará de aquellos que suben repositorios por cumplir alguna tarea o que están en proceso de aprendizaje, de aquellos que lo hacen de manera regular y profesional. A continuación te dejo un enlace a un post diferente si deseas agregar pruebas unitarias a tu proyecto.
Scaffolding de pruebas unitarias con PHPUnit
Implementa PSR en tu proyecto o librería (opcional)
PSR (PHP Standard Recommendation) es un estándar de recomendaciones a nivel de estilos y código en PHP aceptado ampliamente por la comunidad. si deseas que tu librería se utilizada por miles de personas y que tengas un prestigio en la red por tus aportes esta integración no puede faltar. A continuación te dejo un enlace a un post diferente si deseas implementar PSR.
Implementar PSR en proyectos o librerías PHP
Sube tu proyecto a GitHub
Sube tus cambios de manera organizada a GitHub. Recuerda que GitHub es un VCS hosting service, no es un servicio de almacenamiento en donde simplemente subes tu código. Crea cada funcionalidad y súbela en un commit. Puedes utilizar GitFlow también, esto te presentará como un desarrollador profesional.
Versiona tu librería
Otra parte importante antes de cargar tu librería en packagist es versionarla. Si no lo haces, puede que al instalarla obtengas un error como el siguiente:
Could not find a version of package proyecto/mi-repo matching your minimum-stability (stable).
Require it with an explicit version constraint allowing its desired stability.
Puedes crear un release o crear o Lightweight Tag. Te recomiendo visitar la página oficial de GIT para elegir el método de versionado correcto para tu repositorio.
Carga de tu librería en Packagist
Packagist es un repositorio para paquetes de composer. Cuando ejecutas composer install para instalar las dependencias de un proyecto composer busca todos estos paquetes en packagist y descarga las versiones adecuadas colocándolas en la carpeta vendor.
Para cargar tu proyecto en packagist debes ingresar y dar clic en el botón Submit. Seguido a esto debes colocar la URL de tu proyecto y dar clic en el botón Check y seguir los pasos subsecuentes.
Verifica que puedes instalar tu librería
Una vez hayas cargado la URL de tu repositorio en packagist puedes intentar instalarlo en otro proyecto con el siguiente comando:
composer require proyecto/mi-repo
Espero que este tutorial te haya sido de ayuda. Hasta la próxima!.