In diesem Artikel wird gezeigt, wie ein eigenes PHP Composer Packet unter zusätzlicher Verwendung von PHPUnit erstellt werden kann. Anschließend wird gezeigt, wie das Paket sowohl öffentlich mit Packagist, als auch für private Verwendung mit GitLab verteilt werden kann. Diese Anleitung wurde erstellt, um PHP-Entwicklern dabei zu helfen, ihren Arbeitsablauf zu optimieren und die Wiederverwendbarkeit von Code zu verbessern, indem sie ihre eigenen Pakete erstellen und teilen.
Um einen optimalen Arbeitsablauf und eine effiziente Vorgehensweise zu erlangen, ist es oft nützlich, Code-Teile in eine wiederverwendbare Bibliothek auszulagern. Ein gängiges System für PHP ist hierbei composer. In diesem Artikel wird gezeigt, wie ein eigenes composer Paket erstellt werden kann. Es wird gezeigt, wie dieses sowohl auf Packagist als auch in einer selbst-gehosteten GitLab Umgebung verteilt werden kann.
Voraussetzungen
- PHP
- Composer (Hier finden sich Details zur Installation)
- Git und ein (neues) Git Repository für das neue Paket
Schritt 1: Projekt initialisieren
Zuerst wird das neue Paket konfiguriert. Wir werden ein einfaches Hello World Paket zur Demonstration erstellen.
Nachdem composer init eingegeben wurde, werden einige Informationen abgefragt:
Anschließend installieren wir PHPUnit für das Paket mithilfe des folgenden Befehles:
Danach sollte die Datei composer.json in etwa wie folgt aussehen:
Mehr Details wie das composer-Paket konfiguriert werden kann, findet sich hier: https://getcomposer.org/doc/04-schema.md
Schritt 2: Beispiel PHP-Klasse erstellen
Für unser Beispiel, erstellen wir eine einfache Klasse HelloWorld mit einer Methode sayHello()
Schritt 3: Erstellen des Unit-Tests
Um die Funktionalität unseres Codes zu testen, schreiben wir eine Testfall. Wird der Code in Zukunft modifiziert, wird jedesmal gegen diesen Testfall abgeprüft. Dadurch kann garantiert werden, dass die Klasse genau die Funktionalität erfüllt, die entsprechend der Anforderungen in den Testfällen abgedeckt worden idz.
In unserem Fall ergibt sich folgender einfache Testfall zur Veranschaulichung:
Um PHPUnit zu verwenden, können entweder beim Aufruf Befehlszeilenargumente mitübergeben werden, oder die Einstellungen werden über eine Konfigurationsdatei festgelegt:
Mehr Informationen über die Konfigurationsmöglichkeiten finden sich in der PHPUnit Dokumentation: https://docs.phpunit.de/en/10.0/
Anschließend können wir die Testfälle ausführen:
Sofern alles korrekt aufgesetzt worden ist, sollte die Ausgabe ähnlich wie nachfolgend sein – alle Tests erfolgreich abgeschlossen:
Schritt 4a: Verteilung des Paketes mit GitLab
Soll ein composer-Paket verwendet werden, ohne dass der Code veröffentlicht werden soll, kann dies beispielsweise mit einem GitLab-Repository erfolgen. Hinweis: Aktuell muss dass Projekt in einer Gruppe in GitLab sein, um mit nachfolgender Vorgehensweise verwendet werden zu können! Um das Paket zu testen und bei Erfolg zu Veröffentlichen, erstellen wir folgendes CI-Skript:
Mit diesem Skript wird bei jedem Commit die Testsuite ausgeführt und sofern diese erfolgreich abgeschlossen worden ist wird das Paket (privat) veröffentlicht.
Um eine konkrete Version festzulegen, kann ein Tag erstellt werden (Für mehr Informationen zur semantischen Versionierung, siehe https://www.philipp-doblhofer.at/blog/automatischer-changelog-und-versionierung-mit-git/)
Wenn die Paket-Registry in GitLAb aktiviert ist, können hier die erstellten Pakete angezeigt werden:
Um das Paket in einem anderen Projekt zu verwenden, muss folgendes durchgeführt werden:
Zuerst muss ein Access Token erstellt werden, und diese bei composer hinterlegt werden (Den Access Token geheim halten!):
Anschließend muss das Repository in der composer.json Datei hinterlegt werden (Achtung, dies ist nicht die Datei von vorhin, sondern die des neuen Projektes, dass das Paket verwenden soll!)
Schritt 4b: Paket mit Packagist veröffentlichen
Um das Paket öffentlich zur Verfügung zu stellen, muss lediglich ein Account bei packagist.org erstellt werden. Anschließend kann über „Submit“ und der URL des Repositories das Paket verteilt werden:
Schritt 5: Das Paket verwenden
Wir können nun im neuen Projekt das Paket mit folgendem Befehl einbinden:
Anschließend kann es einfach verwendet werden:
Ein Demo-Repository für das Beispiel-Paket findet sich unter https://gitlab.com/philipp.doblhofer/helloworld
Das Packagist-Paket findet sich unter https://packagist.org/packages/doblhofer/helloworld