Composer – Automatisches Laden einer API/benutzerdefinierten Installationsprogramms

StackOverflow https://stackoverflow.com//questions/22021512

  •  21-12-2019
  •  | 
  •  

Frage

Wie lade ich automatisch eine Reihe von Bibliotheks-API-Funktionen mit einer von Composer installierten Bibliothek?

Ich habe eine Bibliothek mit einer Funktions-API, die als Schnittstelle zu den internen Objekten der Bibliothek dient, und möchte, dass Composer die API automatisch lädt und nach der Installation verfügbar macht, ohne dass der Endentwickler eine Datei einbinden muss.

Derzeit wird die Bibliothek nur durch Einbinden geladen __init__.php und es beinhaltet die API-Funktionen und bei Bedarf einen Autoloader.

Danke!

War es hilfreich?

Lösung

Composer verlangt vom Endentwickler immer, dass er eine Datei einschließt vendor/autoload.php.Einfacher kann man es nicht machen.

Aber was Sie tun können, ist, es einzubeziehen __init__.php optional, da Sie durch die Integration von Composer stattdessen diesen Autoloader verwenden können.Dies funktioniert auch für Funktionen, die nicht wirklich automatisch geladen werden konnten – Composer bietet an, immer eine Datei einzubinden, wenn man dazu aufgefordert wird.

Am Ende würde Ihre Composer-Konfiguration dieser API-Bibliothek also so aussehen:

{
    "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"
        ]
    }
}

Ich weiß nicht, ob Ihre Klassen PSR-0 oder sogar PSR-4 entsprechen, aber wenn ja, würden Sie und alle davon profitieren, wenn Sie den Autoloader mit diesen Standards deklarieren könnten.Wenn nicht:Classmap wird Ihnen dabei helfen.

Ihre Funktionsdefinition wird von der oder den unter „Dateien“ genannten Dateien geladen.

Für Composer benötigen Sie keinen eigenen Autoloader mehr.

Man könnte natürlich auch einfach das Alte erwähnen __init__.php als Datei, die in „Dateien“ aufgenommen werden soll, aber dies würde Ihre Bibliothek von allen anderen Klassen trennen, wäre wahrscheinlich weniger leistungsfähig (Composer verfügt bereits über einen sehr guten Autoloader – es besteht keine Notwendigkeit, zwei davon zu haben) und würde dies auf jeden Fall tun Schließen Sie aus, dass alle Ihre Klassen in einen noch schnelleren Composer-Classmap-Autoloader verschoben werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top