ServiceProvider von Laravel 13 und erfahren, wie Sie die Konfiguration als öffentliche API Ihres Pakets pflegen. Die Seite setzt die Grundlagen der Paketentwicklung voraus. Zur Überprüfung der Implementierung wird laravel/framework in Version v13.34.0 verwendet.
Veröffentlichen und Zusammenführen sind getrennte Vorgänge
publishes() registriert eine Quelle und ein Ziel für das Kopieren. Bis vendor:publish die Datei kopiert, bleibt das config-Verzeichnis der Nutzer unverändert. mergeConfigFrom() hingegen aktualisiert das Konfigurations-Repository beim Start der Anwendung und verändert die Datei selbst nicht.
register() verwendet.
mergeConfigFrom() führt nur die oberste Ebene zusammen
ServiceProvider::mergeConfigFrom() übergibt zuerst die Paketkonfiguration und danach die bestehende Konfiguration der Anwendung an array_merge(). Bei gleichen String-Schlüsseln hat der Wert der Anwendung Vorrang.
Das folgende Beispiel bildet den Zusammenführungsvorgang des Frameworks nur mit Arrays nach.
enabled wird ergänzt, transport wird jedoch als gesamtes Array ersetzt. transport.retries bleibt nicht erhalten. Wichtig ist: Wenn Nutzer bereits ein altes transport-Array veröffentlicht haben, werden neue Schlüssel, die Sie demselben Array hinzufügen, nicht ergänzt.
Verschachtelte Konfiguration mit replaceConfigRecursivelyFrom() ergänzen
DerServiceProvider von Laravel 13 enthält außerdem die protected-Methode replaceConfigRecursivelyFrom(). Sie führt in derselben Reihenfolge array_replace_recursive() aus.
Wenn Ihre Konfigurations-API das einzelne Überschreiben verschachtelter String-Schlüssel erlauben soll, ändern Sie register() im Provider wie folgt. Für denselben Konfigurationsschlüssel müssen Sie sie nicht zusätzlich zu mergeConfigFrom() von oben verwenden.
$defaults und $overrides ergibt sich folgendes Ergebnis.
replaceConfigRecursivelyFrom() ist eine Methode, die im auf dieser Seite geprüften Quellcode von Laravel 13 existiert. Unterscheiden Sie sie von mergeConfigFrom(), das in der offiziellen Dokumentation zur Paketentwicklung vorgestellt wird, und prüfen Sie vor der Verwendung die Implementierung der jeweiligen Framework-Version.Listen mit numerischen Schlüsseln werden nicht vollständig ersetzt
Rekursives Ersetzen bedeutet nicht, dass das Array vollständig durch die Werte der Nutzer ausgetauscht wird. Auch bei numerischen Schlüsseln wird nur der Wert mit demselben Schlüssel ersetzt, und Schlüssel, die Nutzer nicht angegeben haben, bleiben erhalten.['slack'] angeben, bleibt database erhalten. Außerdem wird die Standardliste nicht geleert, wenn Sie ['channels' => []] übergeben. Achten Sie besonders bei Konfigurationen darauf, bei denen die Angabe der gesamten Liste eine Bedeutung hat, etwa bei Benachrichtigungszielen oder Middleware.
Wenn Ihr Paket solche Konfigurationen enthält, überdenken Sie die Struktur der Konfiguration. Sie können zum Beispiel Listen und teilweise überschreibbare assoziative Arrays auf getrennte Schlüssel der obersten Ebene verteilen und flaches Zusammenführen verwenden. Wenn Sie die Zusammenführungsstrategie eines bereits veröffentlichten Pakets ändern, verhält sich dieselbe Konfigurationsdatei anders. Behandeln Sie dies daher nicht als bloßen Austausch der Implementierung.
Der Konfigurations-Cache speichert die zusammengeführten Werte
Beide Methoden überspringen das Zusammenführen, wenn die AnwendungCachesConfiguration implementiert und configurationIsCached() true zurückgibt. In einer gewöhnlichen Laravel-Anwendung trifft dies auf Starts zu, bei denen ein Konfigurations-Cache vorhanden ist.
ConfigCacheCommand löscht den alten Konfigurations-Cache, startet eine neue Anwendung und ruft das gesamte Konfigurations-Repository ab. Bei diesem Start wird die Konfiguration der Provider zusammengeführt und das Ergebnis in der Cache-Datei gespeichert. Bei nachfolgenden Starts lädt LoadConfiguration diese Werte.
Wenn sich also durch ein Paket-Update Standardwerte oder die Zusammenführungsstrategie ändern, wirkt sich das nicht auf Anwendungen aus, die weiterhin einen alten Cache verwenden. Bei Deployments mit Konfigurations-Cache bauen Sie den Cache mit dem aktualisierten Code neu auf.
php artisan config:clear. Legen Sie den Speicherort des Caches nicht selbst fest, sondern überlassen Sie die Verwaltung den Laravel-Befehlen.
Prüfungen vor der Veröffentlichung von Konfigurationsänderungen
Behandeln Sie in den Tests Ihres Pakets nicht nur unveröffentlichte Konfigurationen, sondern auch Konfigurationen, die aus älteren Versionen übrig geblieben sind, als Eingabe.- Auch ohne veröffentlichte Konfiguration lassen sich die erforderlichen Standardwerte abrufen.
- Bei einer alten veröffentlichten Konfiguration haben die Werte der Nutzer Vorrang, und neue Einträge werden wie vorgesehen ergänzt.
- Der Überschreibungsvertrag für verschachtelte Arrays, Listen mit numerischen Schlüsseln und leere Arrays bleibt unverändert.
config:cacheläuft in der nutzenden Anwendung erfolgreich, und ein separater Start mit Cache liefert dieselbe Konfiguration.
Verwandte Seiten
Pakete testen
Registrieren Sie Service Provider und überprüfen Sie das Verhalten von Konfiguration und Services.
Versionskompatibilität verwalten
Verknüpfen Sie Änderungen an der öffentlichen API mit Ihrer Release-Strategie und der laufenden Wartung.