Composer es el gestor de dependencias de PHP. Hace la vida más fácil a los desarrolladores porque soluciona el problema de tener que estar pendiente de las librerías de terceros que andamos poniendo y quitando en nuestros proyectos.
Basta con crear un archivo composer.json
en la carpeta raíz de nuestra aplicación y escribir la clave require
:
{
"require": {
"vendor/package": "1.3.2",
"vendor/package2": "1.*",
"vendor/package3": "^2.0.3"
}
}
Ahí escribimos los paquetes que necesitamos y Composer los instalará como por arte de magia junto con las dependencias correspondientes. Ya sabes, solo hay que ejecutar el comando:
composer install
¿Sabías que con Composer puedes poner un autoloader para cargar automáticamente las clases PHP de tu aplicación? Esta característica es un avance relativamente reciente que ayuda a mantener bien el código.
Allá por 2011, antes de la entrada en escena de Composer y Packagist, los desarrolladores de aplicaciones PHP solían poner un montón de sentencias include
y require
en su código fuente.
Cada vez que necesitaban incluir un archivo ponían un include
o un require
. ¡Vaya rollo! Teniendo en cuenta que el paradigma de orientación a objetos invita a escribir un archivo por clase PHP, lo anterior dificultaba el mantenimiento de la aplicación.
Bueno, como alternativa podías utilizar la función spl_autoload_register o programar tu propio script de carga automática de clases. O si trabajabas con algún framework de desarrollo, el framework lo hacía por ti y te olvidabas para siempre de tener que solucionar ese problema.
Si bien Composer viene con varios mecanismos de carga de clases nosotros nos centraremos ahora en el PSR-4, que es el predeterminado y el que se aconseja utilizar.
Es muy sencillo, PSR-4 no es más que una convención que tienes que seguir para que tus clases PHP se carguen de forma automática gracias a Composer. Primero tienes que entender, eso sí, como funcionan los namespaces. Mira este vídeo:
Si utilizas namespaces en tus proyectos PHP probablemente ya sabrás que están completamente separados de la estructura de ficheros. Los namespaces no tienen nada que ver con las carpetas, son dos cosas distintas.
Pues bien, a partir de ahora utiliza la misma jerarquía de nombres tanto en tus namespaces como en tus carpetas y ficheros. Tenemos que hacer ese mapeo, que los nombres coincidan. El siguiente paso es añadir una clave autoload
al archivo composer.json
utilizando la convención PSR-4. Y por último ejecutamos este comando, que hará la magia por nosotros:
composer dump-autoload --optimize
Estos son los pasos a seguir:
autoload
PSR-4 al archivo composer.json
composer dump-autoload --optimize
autoload.php
recién generado en tu app¿Sabías que el framework Slim utiliza PSR-4? Está disponible en GitHub, fíjate en la clave autoload
de su archivo composer.json
:
...
"autoload": {
"psr-4": {
"Slim\\": "Slim"
}
},
...
La clave autoload
hace corresponder el namespace Slim
con la carpeta Slim
. El nombre de los namespaces de los archivos coincide con el de la carpeta donde están alojados, así pues las clases PHP se cargan automáticamente gracias a la convención:
Archivo | Namespace del archivo |
---|---|
Slim/Exception/ContainerException.php |
Slim\Exception |
Slim/Exception/ContainerValueNotFoundException.php |
Slim\Exception |
... | ... |
Slim/Http/Cookies.php |
Slim\Http |
Slim/Http/Environment.php |
Slim\Http |
... | ... |
Pues ya está, ¡tú puedes hacer lo mismo en tus aplicaciones! Sigue la convención PSR-4. Con la convención implementada y con la clave autoload en tu composer.json
, no olvides ejecutar este comando:
composer dump-autoload --optimize
Eso creará la carpeta /vendor/composer
y el archivo /vendor/autoload.php
. Este archivo contiene la lógica de carga automática de clases; así pues, para incluirlo en tu aplicación escribe:
require_once __DIR__ . '/vendor/autoload.php';
Esto es todo por hoy. Gracias por haber leído este post. Espero que te haya gustado y que lo compartas con tus amigos.