AboutCommand::add() fügen Sie der Ausgabe von php artisan about einen Abschnitt für Ihr Paket hinzu, ohne einen eigenen Befehl zu implementieren.
Die offizielle Dokumentation enthält ein grundlegendes Registrierungsbeispiel. Diese Seite betrachtet zusätzlich die Implementierung in Laravel 13 und geht auf den Zeitpunkt der Datenerfassung, die JSON-Typen, Kollisionen von Abschnittsnamen und den Registrierungszustand in Tests ein.
Angezeigte Inhalte im Provider registrieren
Das folgende Beispiel setzt voraus, dasscourier.enabled und courier.driver bereits als Paketkonfiguration registriert sind. Wie Sie Konfiguration registrieren, erfahren Sie unter Paketkonfiguration zusammenführen und cachen.
runningInConsole() ist eine Bedingung, die unnötige Registrierungen bei HTTP-Requests vermeidet. Sie erkennt nicht nur die Ausführung von about, die Registrierung erfolgt also auch bei anderen Artisan-Befehlen. Die Konfigurationsabfragen innerhalb der obigen Closure werden zum Zeitpunkt der Registrierung jedoch nicht ausgeführt.
Registrierung und Auswertung zeitlich getrennt betrachten
In Laravelv13.35.0 erfasst add() die Daten nicht sofort, sondern fügt dem statischen $customDataResolvers eine Registrierungs-Closure hinzu. Bei der Ausführung von about werden die Anzeigedaten zusammengestellt und die registrierten Closures zum Abrufen der Daten ausgewertet.
Wenn Sie Konfigurationswerte innerhalb der Closure abrufen, statt sie vorab außerhalb von add() zu lesen und in einem Array festzuschreiben, spiegelt die Ausgabe den Zustand zum Zeitpunkt der Befehlsausführung wider. Der Filter --only greift dagegen erst nach der Auswertung der Closures zum Datenabruf.
Acme Courier ausgewertet. Nicht angezeigt zu werden ist etwas anderes als nicht verarbeitet zu werden.
Ermitteln Sie zusätzliche Informationen daher aus Konfigurationswerten oder leichtgewichtigem lokalem Zustand. Verbindungsprüfungen gegen externe APIs, Datenbankabfragen oder das Ändern von Dateien können sogar Befehle verlangsamen oder fehlschlagen lassen, die nur nicht zusammenhängende Abschnitte prüfen. Lagern Sie Verbindungsprüfungen und Reparaturen in eigene Artisan-Befehle aus.
CLI-Anzeige und JSON-Typen vereinbaren
Um nur die Informationen Ihres Pakets zu prüfen, geben Sie den Abschnittsnamen in kleingeschriebenem Snake Case an. FürAcme Courier ist das acme_courier.
courier.enabled den Wert true und courier.driver den Wert log hat, sieht das JSON so aus:
Enabled als ENABLED angezeigt. AboutCommand::format() ist ein Helfer, mit dem Sie console für die CLI und json für JSON angeben können. Das obige Beispiel gibt nur console an, daher liefert JSON den ursprünglichen booleschen Wert. Die Anzeigezeichenkette der CLI muss nicht in JSON übernommen werden.
Wenn Sie wie im Beispiel Namen aus gewöhnlichen englischen Wörtern verwenden, die durch Leerzeichen getrennt sind, lassen sich Filter und JSON-Schlüssel leichter handhaben. Schlüssel, auf die automatisierte Prozesse zugreifen, können sich auch durch eine Änderung des Anzeigenamens ändern. Prüfen Sie daher bei jedem Release die Kompatibilität.
Abschnitte mit paketspezifischen Namen versehen
add() hängt Einträge an denselben Abschnitt an. Die Angabe eines gleichnamigen Abschnitts ersetzt nicht den gesamten zuvor registrierten Inhalt.
Wählen Sie einen Namen wie Acme Courier, der sich von anderen Paketen unterscheidet, und ergänzen Sie die Laravel-Standardabschnitte Environment, Cache, Drivers und Storage nur, wenn es nötig ist.
Wenn Sie im selben Abschnitt mehrfach einen Eintrag mit demselben Namen registrieren, können in der CLI mehrere Zeilen erhalten bleiben, während JSON sie unter demselben Schlüssel zusammenführt und der spätere Wert erhalten bleibt. Vermeiden Sie außerdem Namen, die zwar unterschiedlich geschrieben sind, nach der Umwandlung in Snake Case aber denselben Schlüssel ergeben. Bündeln Sie die Registrierung an einer Stelle und gestalten Sie die Einträge so, dass sie sowohl in der CLI als auch in JSON eindeutig sind.
Statischen Registrierungszustand in Tests behandeln
Beim Start vonabout werden die Anzeigedaten $data zurückgesetzt, die Registrierungsliste für zusätzliche Informationen $customDataResolvers bleibt jedoch erhalten. So können die Informationen jedes Mal aus denselben Registrierungen neu erfasst werden. Wird boot() eines Providers im selben PHP-Prozess wiederholt ausgeführt, können sich die Registrierungen jedoch anhäufen.
AboutCommand::flushState() ist eine Methode, die die Registrierungen aller Pakete sowie die Anzeigedaten löscht. Rufen Sie sie nicht in einem produktiven Provider auf, um Duplikate Ihres eigenen Abschnitts zu vermeiden. Dabei gehen auch die Diagnoseinformationen anderer Pakete verloren.
Wenn Sie die Anwendung in einer eigenen Testinfrastruktur neu aufbauen, legen Sie fest, wer für das Zurücksetzen des Zustands zwischen Tests verantwortlich ist. Falls Sie zurücksetzen, tun Sie dies vor dem Booten der betreffenden Provider und führen Sie danach alle nötigen Registrierungen durch. Prüfen Sie auch, ob Ihre bestehende Testinfrastruktur den Zustand bereits zurücksetzt.
Prüfpunkte vor dem Release
Prüfen Sie die folgenden Kombinationen mit Laravel-Pakete mit Orchestra Testbench testen und in einer echten Anwendung, die Ihr Paket nutzt.Verwandte Seiten
Laravel-Paketentwicklung
Grundlagen zu Providern und der Registrierung von Ressourcen.
Paketkonfiguration zusammenführen und cachen
Zusammenspiel von Standardwerten, Überschreibungen durch Nutzer und Konfigurations-Cache.
Herangezogene Primärquellen
- Offizielle Laravel-Dokumentation: Informationen aus Paketen zu about hinzufügen
- Offizielle Laravel-Dokumentation: about und —only
- Laravel Framework v13.35.0: AboutCommand: Registrierung, Auswertungsreihenfolge, Schlüsselumwandlung,
format()undflushState(). - Laravel Framework v13.35.0: Tests für format
- Laravel Framework v13.35.0: Integrationstests für die JSON-Ausgabe