Ver índice de contenidos del libro

2.6. Cargando clases de forma automática

Si la librería proporciona información sobre la carga automática de sus clases, Composer genera un archivo vendor/autoload.php. Si incluyes este archivo en tu proyecto, ya puedes utilizar cualquier clase instalada a través de Composer sin tener que incluirla explícitamente en tu código:

require 'vendor/autoload.php';

Este cargador de clases simplifica mucho el uso del código de terceros. Si por ejemplo tu proyecto utiliza la librería Monolog, puedes utilizar sus clases directamente y Composer se encargará de cargarlas automáticamente:

$log = new Monolog\Logger('name');
$log->pushHandler(
    new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING)
);
 
$log->addWarning('Foo');

Composer permite incluso que añadas tu propio código fuente al cargador automático de clases mediante la clave autoload del archivo composer.json:

{
    "autoload": {
        "psr-4": {"Acme\\": "src/"}
    }
}

La configuración anterior hace que Composer cree un cargador automático de clases para el namespace Acme. Este cargador sigue las normas del estándar PSR-4 de PHP.

La configuración se basa en mapear namespaces a directorios. En este caso, el directorio src/ que contiene el código de tu proyecto estaría en la raíz del proyecto, al mismo nivel que el directorio vendor/. Así, el archivo src/Acme/Foo.php debería contener la clase Acme\Foo.

Después de añadir la opción autoload, tienes que ejecutar de nuevo el comando dump-autoload para que se regenere el archivo vendor/autoload.php.

Al incluir el archivo autoload.php, se devuelve el objeto que representa al cargador automático de clases. Si guardas este valor en una variable, podrás utilizarla después para añadir más namespaces durante la ejecución de la aplicación. Esto puede ser útil por ejemplo para cargar automáticamente las clases durante los tests:

$loader = require 'vendor/autoload.php';
$loader->add('Acme\\Test\\', __DIR__);

Además de la carga de clases según el estándar PSR-4, también puedes utilizar el estándar PSR-0 y el mapeo de clases. Consulta la sección sobre la propiedad autoload para obtener más información.

Nota Composer incluye su propio cargador de clases. Si prefieres utilizar otro cargador, puedes hacer uso entonces únicamente del archivo vendor/composer/autoload_namespaces.php, que devuelve un array asociativo que mapea los namespaces con los directorios.