Introducción a Composer

En este articulo vamos aprender sobre composer y como podemos usarlo para desarrollar nuestras aplicaciones PHP

Composer es una herramienta que nos permite administrar las dependencias de terceros dentro de nuestra aplicación PHP; nos permitirá crear una lista de todas las dependencias que tengamos y la versión concreta que queramos usar. Entonces Composer buscará cada librería en los repositorios adecuados y descargar una versión adecuada a lo que le hayamos indicado.

Composer necesita que le digamos exactamente que bibliotecas queremos instalar en cada proyecto. Después las instalará en un directorio, por defecto será vendor. La ventaja de composer es que instalará automaticamente las dependencias de las bibliotecas que queramos usar y no solo las dependencias de nuestro proyecto.

Composer te permite especificar de varias maneras que versión debe instalar, por ejemplo puedes usar el comodín (*) y siempre que ejecutes composer tendrás la última versión de la biblioteca. Por el contrario puedes fijar una versión y revisión concreta y tendrás la seguridad de que una nueva versión de la biblioteca no te rompa tu aplicación.

Instalar composer

Composer necesita que tengas instalado una versión de PHP igual o superior a la 5.3.2. Durante el proceso de instalación te advertirá de otras cosas que necesites tener configuradas, como tener la extensión php_openssl instalada.

Dependiendo del repositorio que vayas a usar necesitarás tener instalado mas cosas. Por ejemplo para usar repositorios en GIT (que es lo mas común) necesitarás tener GIT instalado

Para mas detalles sobre como instalar Composer en tu máquina puedes leer la documentación oficial.

La manera más fácil, sucia y peligrosa es ejecutándolo con cURL

curl -sS https://getcomposer.org/installer | php

Como usar Composer

Lo primero que necesitas para usar composer es crear un archivo de texto plano en la raíz de tu proyecto que se llame composer.json y en el especificaremos todas las dependencias de nuestra aplicación mediante notcación JSON.

Lo primero que debes aprender es la palabra clave “require” que es la que le indica a composer los paquetes que requiere tu aplicación.

{
    "require": {
        "php": ">=5.3.33",
        "silex/silex": "2.0.*",
    }
 }

Aquí le estamos indicando a Composer que nuestra aplicación debe tener PHP 5.3.33 o superior instalado, y que requiere tener el framework Silex en su versión 2.0. Pero usando el comodín en el último dígito (revisión) nos actualizará el framework en cualquier parche que saquen (versión menor).

Una vez tenemos el archivo composer.json creado en la raíz de nuestro proyecto, podemos instalar nuestras dependencias mediante el siguiente comando:

php composer.phar install

Repositorio por defecto de Composer

Existe una gran recopilación de paquetes listos para usar con composer en el repositorio de packagist.org. Puedes navegar por el y ver que hay disponible. Todo lo que esté ahí se puede usar sin añadir mas información sobre otros repositorios al composer.json

Autoloading de las dependencias

Una de las características mas útiles de Composer es el archivo “autoloading” que genera. Dentro del directorio “vendor” hay un archivo generador automáticamente por composer (vendor/autoload.php) que al incluirlo en nuestra aplicación nos evita tener que hacer mas require e includes. Así bastará con instanciar la clase que queramos.

require_once 'vendor/autoload.php';

En el archivo composer.json puedes definir la forma de hacer el autoloading. Lo normal es usar PSR-4, ya que es la manera mas elegante de organizar el código en clases y namespaces.

En tu composer.json añade las siguientes líneas (el elemento require y autoload deben estar dentro del mismo objeto JSON y al mismo nivel):

"autoload": {
 "classmap": [
        "database"
    ],
    "psr-4": {}
 }

Este formato te permite acceder a las clases simplemente mediante su namespace, por ejemplo \Symfony\Core\Request entonces composer cargará automáticamente la clase que espera que esté en /Symfony/Core/Request.php ó /vendor/Symfony/Core/Request.php.

PD: Este articulo es una traducción mía del articulo del blog de Paulund, al que recomiendo que echéis un ojo si os interesa el desarrollo de wordpress.