Ver índice de contenidos del libro

5.6. La propiedad autoload

Esta propiedad permite configurar la carga automática de clases. Los tres valores permitidos para esta propiedad son el cargador de clases que sigue el estándar PSR-0, el mapa de clases (classmap) y los archivos individuales (files). El método recomendado es el cargador PSR-0 porque es el más flexible (no hace falta por ejemplo regenerar el cargador de clases cuando se añade una nueva clase al proyecto).

5.6.1. El cargador de clases PSR-0

Utiliza la clave psr-0 para definir el mapeo entre namespaces y rutas del sistema de archivos (estas rutas son relativas respecto al directorio raíz del proyecto). Este cargador también soporta el estilo que antiguamente utilizaban las clases de PEAR que no tenían namespaces.

Ten en cuenta que los namespaces deben acabar siempre en \\ para evitar problemas con la carga de clases. De esta forma, el namespace Foo\\ no se confunde con FooBar\\.

La configuración que hagas del cargador PSR-0 se procesa durante los comandos install y update para crear un array asociativo que puedes consultar en el archivo vendor/composer/autoload_namespaces.php. Ejemplo:

{
    "autoload": {
        "psr-0": {
            "Monolog\\": "src/",
            "Vendor\\Namespace\\": "src/",
            "Vendor_Namespace_": "src/"
        }
    }
}

Si necesitas asociar un mismo namespace a varios directorios, puedes indicarlos mediante un array:

{
    "autoload": {
        "psr-0": { "Monolog\\": ["src/", "lib/"] }
    }
}

El estándar PSR-0 no sólo permite declarar namespaces, sino que puedes bajar incluso a nivel de clase. Esto es útil para aquellas librerías que solamente tienen una clase en el namespace global. Si el código PHP de esa clase se encuentra en el mismo directorio raíz del paquete, puedes declararlo de la siguiente manera:

{
    "autoload": {
        "psr-0": { "MiClaseGlobal": "" }
    }
}

Por último, también puedes utilizar un namespace vacío para asociar un determinado directorio con cualquier namespace que no esté declarado explícitamente:

{
    "autoload": {
        "psr-0": { "": "src/" }
    }
}

5.6.2. El mapa de clases

Las referencias que definas en la propiedad classmap también se procesan durante la ejecución de los comandos install y update para generar un array asociativo gigantesco en el archivo vendor/composer/autoload_classmap.php. Este array se construye buscando todas las clases del proyecto en los archivos cuyas extensiones sean .php y .inc y se encuentren en los directorios indicados.

Puedes utilizar los mapas de clases cuando quieras cargas las clases de las librerías que no siguen el estándar PSR-0. Para ello, especifica todos los directorios del proyecto en los que se van a buscar las clases. Ejemplo:

{
    "autoload": {
        "classmap": ["src/", "lib/", "Something.php"]
    }
}

5.6.3. Los archivos individuales

Si necesitas requerir un determinado archivo en cada ejecución de la aplicación, utiliza la propiedad files para cargarlo. Esto es útil por ejemplo para incluir funciones de PHP que no se pueden cargar de forma automática como las clases. Ejemplo:

{
    "autoload": {
        "files": ["src/MiLibreria/funciones.php"]
    }
}