Pregunta

¿Cómo cargo automáticamente un conjunto de funciones API de biblioteca con una biblioteca instalada por Composer?

Tengo una biblioteca con una API de función que se utiliza para interconectar los objetos internos de la biblioteca y quiero que Composer cargue automáticamente la API y la haga disponible después de la instalación sin necesidad de que el desarrollador final incluya un archivo.

Actualmente la biblioteca se carga simplemente incluyendo el __init__.php e incluye las funciones API y un cargador automático si es necesario.

¡Gracias!

¿Fue útil?

Solución

Composer siempre requerirá que el desarrollador final incluya un archivo, que es vendor/autoload.php.No puedes hacerlo más fácil que eso.

Pero lo que puedes hacer es incluir __init__.php opcional porque la integración de Composer le permite usar ese cargador automático en su lugar.Esto también funcionará para funciones que en realidad no se pueden cargar automáticamente: Composer ofrece incluir siempre un archivo si así se le indica.

Entonces, al final, la configuración de Composer de esa biblioteca API se vería así:

{
    "name": "yourvendorname/yourfancylibraryname",
    "license": "any open source identifier",
    "autoload": {
        "psr-0": {
            "Foo_Api": "src/files"
        },
        "classmap": [
            "extra/folders_with_any_other_class_not_conforming_to_psr0_or_psr4"
        ],
        "files": [
            "functions/file_with_your_function_definitions.php"
        ]
    }
}

No sé si sus clases cumplen con PSR-0 o incluso PSR-4, pero si lo hacen, usted y todos se beneficiarían si pueden declarar el cargador automático con estos estándares.Si no:Classmap te ayudará.

La definición de su función será cargada por el archivo o archivos mencionados en "archivos".

Ya no necesitas tu propio cargador automático para Composer.

Por supuesto, también podrías simplemente mencionar el antiguo __init__.php como el archivo que se incluirá en "archivos", pero esto separaría su biblioteca de todas las demás clases, probablemente tendría menos rendimiento (Composer ya tiene un cargador automático muy bueno; no es necesario tener dos de ellos) y definitivamente excluya todas sus clases para que no se descarguen en un cargador automático de mapas de clases de Composer aún más rápido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top