v13.34.0.
Registrieren und Veröffentlichen sind getrennte Vorgänge
loadViewsFrom() registriert einen Suchpfad für einen Namespace. publishes() registriert Quelle und Ziel, das eigentliche Kopieren übernimmt vendor:publish. Im folgenden Beispiel können Sie courier::deliveries.show auch ohne Veröffentlichen verwenden.
src/CourierServiceProvider.php
resources/views/deliveries/show.blade.php. Die Punkte im View-Namen werden bei der Suche in Verzeichnistrenner umgewandelt.
resources/views/deliveries/show.blade.php
courier, das als zweites Argument an loadViewsFrom() übergeben wird, die Vereinbarung für View-Referenzen und das Verzeichnis zum Überschreiben.
Überschreibungen werden pro Datei gesucht
ServiceProvider::loadViewsFrom() prüft beim Auflösen von view nacheinander die Pfade aus der Konfiguration view.paths. Existiert in einem Pfad ein Verzeichnis vendor/courier, wird dieses dem Namespace hinzugefügt, und zuletzt kommt der Pfad des Pakets hinzu.
FileViewFinder durchsucht die Pfade dieses Namespace der Reihe nach und gibt die erste gefundene Datei zurück. Bei einer Konfiguration mit dem Standardpfad resources/views ergibt sich folgende Reihenfolge.
Dabei wird nicht das gesamte Verzeichnis umgeschaltet. Überschreiben Nutzer nur deliveries/show.blade.php, werden alle anderen, nicht überschriebenen Views weiterhin aus dem Paket geladen.
Bei einer Konfiguration mit mehreren
view.paths kann es auch mehrere Orte zum Überschreiben geben. resource_path('views/vendor/courier') ist nur das Veröffentlichungsziel in diesem Beispiel und beschränkt die Suche nicht auf diesen Ort. Verwenden Sie einen paketspezifischen Namespace und vermeiden Sie ein Design, bei dem mehrere Provider demselben Namen Pfade hinzufügen.Nur die benötigten Views anpassen
Nutzer können die Templates mit folgendem Befehl kopieren. Geben Sie Provider und Tag an, damit keine anderen Ressourcen mitkopiert werden.Erneutes Veröffentlichen führt keine Änderungen zusammen
VendorPublishCommand überspringt das Kopieren normalerweise, wenn am Ziel bereits eine gleichnamige Datei existiert. --force überschreibt vorhandene Dateien. Auch --existing ist eine Option, die „bereits veröffentlichte Dateien überschreibt“, und kein Modus, der die Änderungen der Nutzer erhält.
Keine dieser Methoden ist ein Merge, der alte Version, neue Version und Änderungen der Nutzer vergleicht. Ebenso werden Views, die aus dem Paket entfernt wurden, nicht automatisch aus dem Veröffentlichungsziel gelöscht. Reduzieren Sie den Update-Ablauf daher nicht auf „denselben Tag erneut veröffentlichen“.
Views ebenfalls als öffentliche API pflegen
Nicht nur der View-Name, auch die übergebenen Daten und die referenzierten Bausteine wirken sich auf die Anpassungen der Nutzer aus. Benennen Sie in einer neuen Version zum BeispieltrackingCode in eine andere Variable um, erhalten Nutzer, die ein altes Template behalten, die benötigten Werte aus dem neuen Code nicht mehr.
Prüfen Sie vor einem Release die folgenden Vereinbarungen.
- Ändern Sie den Namespace und View-Namen wie
deliveries.shownicht unbedacht. - Dokumentieren Sie die übergebenen Variablen, ihre Typen und ob sie Pflicht oder optional sind.
- Berücksichtigen Sie auch die Ziele von
@includeund@extendssowie die Props von Blade-Komponenten als Änderungen. - Führen Sie in den Release Notes die geänderten Views und die Änderungen auf, die in bereits veröffentlichte alte Versionen übernommen werden sollten.
Der Blade-Cache aktualisiert keine überschreibenden Dateien
view:cache kompiliert Blade-Templates vorab zu PHP. ViewCacheCommand führt zuerst view:clear aus und sammelt dann die normalen View-Pfade sowie die für Namespaces registrierten Pfade, um die zu kompilierenden Dateien zu finden.
Vom Cache der Suchergebnisse unterscheiden
FileViewFinder::find() speichert gefundene Pfade im Array $views der jeweiligen Finder-Instanz. Außerdem wird das Vorhandensein des Überschreibungsverzeichnisses im Callback von loadViewsFrom() geprüft. Wird nach dem Start ein neues Verzeichnis angelegt, wird es nicht automatisch zu den bereits registrierten Suchpfaden hinzugefügt.
view:clear ist kein Befehl, der den Finder-Zustand anderer laufender Prozesse auf einen Schlag löscht. Laden Sie langlebige Prozesse wie Octane gemäß Ihrem normalen Deployment-Ablauf neu. flush() des Finders löscht zwar die Suchergebnisse, registriert aber keine neuen Überschreibungsverzeichnisse.
Vor dem Release prüfen
Prüfen Sie zusätzlich zu den Tests des Pakets die folgenden Kombinationen in einer nutzenden Anwendung. Tests, die nur das neueste Template rendern, können die Kompatibilität für Nutzer mit bereits veröffentlichten alten Versionen nicht nachweisen.- Ohne Veröffentlichen wird die View des Pakets gerendert.
- Wird nur eine Datei überschrieben, hat nur diese Datei Vorrang, alle anderen fallen auf das Paket zurück.
- Auch wenn ein veröffentlichtes Template der alten Version erhalten bleibt, lässt es sich mit den Daten der neuen Version rendern.
- Beim normalen erneuten Veröffentlichen bleiben Anpassungen erhalten, und nicht veröffentlichte Dateien werden wie beabsichtigt hinzugefügt.
- Nach Änderungen an überschreibenden Dateien läuft
view:cacheerfolgreich, und nach einem neuen Start wird die geänderte Darstellung angezeigt.
Verwandte Seiten
Views
Grundlagen zum Erstellen von Views, zur Übergabe von Daten und zur Vorkompilierung.
Blade-Templates
Verwendung von Layouts, Includes und Komponenten.
Versionskompatibilität verwalten
Verknüpfen Sie Änderungen an Template-Vereinbarungen mit Ihrer Release-Strategie.
Octane
Lebenszyklus und Neuladen langlebiger Anwendungen.
Herangezogene Primärquellen
- Offizielle Laravel-Dokumentation: Paket-Views
- ServiceProvider: Registrierung von View-Pfaden
- FileViewFinder: Suchreihenfolge und Speichern von Suchergebnissen
- VendorPublishCommand: Bedingungen für das Veröffentlichen von Dateien
- ViewCacheCommand: Sammeln der View-Pfade und Kompilierung
- ViewClearCommand: Löschen kompilierter Dateien
- Compiler: Prüfung der Änderungszeit