v13.34.0.
Registreren en publiceren zijn afzonderlijke processen
loadViewsFrom() registreert zoekpaden bij een namespace. publishes() registreert een bron en een bestemming; het daadwerkelijke kopiëren gebeurt door vendor:publish. In het volgende voorbeeld kun je courier::deliveries.show ook zonder publiceren gebruiken.
src/CourierServiceProvider.php
resources/views/deliveries/show.blade.php. De punten in de viewnaam worden bij het zoeken omgezet in mapscheidingstekens.
resources/views/deliveries/show.blade.php
courier, het tweede argument van loadViewsFrom(), de afspraak voor viewverwijzingen en voor de map waarin overschrijvingen staan.
Per bestand naar overschrijvingen zoeken
Wanneerview wordt geresolved, controleert ServiceProvider::loadViewsFrom() de paden in de configuratie view.paths op volgorde. Bestaat in een pad de map vendor/courier, dan wordt die map aan de namespace toegevoegd. Als laatste wordt het pad van het package toegevoegd.
FileViewFinder doorzoekt de paden van die namespace op volgorde en retourneert het eerste bestand dat wordt gevonden. Bij een opzet met de standaard resources/views is de volgorde als volgt.
Dit is geen omschakeling van de hele map. Ook als een gebruiker alleen deliveries/show.blade.php overschrijft, worden de andere, niet-overschreven views uit het package geladen.
Bij een opzet met meerdere
view.paths kunnen er ook meerdere locaties voor overschrijvingen zijn. resource_path('views/vendor/courier') is in dit voorbeeld de publicatiebestemming, maar beperkt het zoeken niet tot alleen die locatie. Gebruik een package-specifieke namespace en vermijd een ontwerp waarin meerdere providers paden aan dezelfde naam toevoegen.Alleen de benodigde views aanpassen
Gebruikers kunnen de templates kopiëren met het volgende commando. Geef de provider en de tag op, zodat er geen andere resources worden meegenomen.Opnieuw publiceren voegt geen verschillen samen
VendorPublishCommand slaat het kopiëren normaal over als er al een bestand met dezelfde naam op de bestemming staat. --force overschrijft bestaande bestanden. Ook --existing is een optie om “gepubliceerde bestanden te overschrijven” en geen modus die de bewerkingen van gebruikers behoudt.
Geen van deze methoden is een merge waarbij de oude versie, de nieuwe versie en de bewerkingen van de gebruiker worden vergeleken. Ook worden views die uit het package zijn verwijderd niet automatisch van de bestemming verwijderd. Maak van de updateprocedure dus niet “gewoon dezelfde tag opnieuw publiceren”.
Ook views onderhouden als publieke API
Niet alleen de viewnamen, maar ook de ontvangen data en de onderdelen waarnaar wordt verwezen hebben invloed op de aanpassingen van gebruikers. Als je bijvoorbeeld in een nieuwe versietrackingCode een andere variabelenaam geeft, krijgen gebruikers die een oude template hebben behouden niet meer de benodigde waarde van de nieuwe code.
Controleer vóór een release de volgende afspraken.
- Wijzig de namespace en viewnamen zoals
deliveries.showniet zonder goede reden. - Leg de doorgegeven variabelen, hun types en of ze verplicht of optioneel zijn vast.
- Neem ook de verwijzingen van
@includeen@extendsen de props van Blade-componenten mee in de wijzigingen. - Vermeld in de release notes welke views zijn aangepast en welke wijzigingen op gepubliceerde oude versies moeten worden toegepast.
De Blade-cache werkt overschrijvende bestanden niet bij
view:cache compileert Blade-templates vooraf naar PHP. ViewCacheCommand voert eerst view:clear uit en verzamelt daarna de gewone viewpaden en de paden die bij namespaces zijn geregistreerd om de te compileren bestanden te vinden.
Onderscheid met de cache van zoekresultaten
FileViewFinder::find() slaat gevonden paden op in de array $views van die Finder-instantie. Daarnaast wordt het bestaan van de overschrijvingsmap gecontroleerd in de callback van loadViewsFrom(). Een map die je na het opstarten toevoegt, wordt dus niet automatisch aan de al geregistreerde zoekpaden toegevoegd.
view:clear is geen commando dat in één keer de Finder-status wist die door andere draaiende processen wordt vastgehouden. Laad langlopende processen zoals Octane opnieuw volgens je gewone deploymentprocedure. flush() van de Finder wist de zoekresultaten, maar registreert geen nieuwe overschrijvingsmappen.
Wat je vóór een release controleert
Controleer naast de tests van het package de volgende combinaties in een applicatie die het package gebruikt. Een test die alleen de nieuwste templates rendert, verifieert niet de compatibiliteit voor gebruikers die een oude versie hebben gepubliceerd.- Zonder publicatie worden de views van het package gerenderd.
- Als je één bestand overschrijft, krijgt alleen dat bestand voorrang en vallen de andere terug op het package.
- Ook met behouden gepubliceerde templates van een oude versie kan worden gerenderd met de data die de nieuwe versie doorgeeft.
- Bij gewoon opnieuw publiceren blijven aanpassingen behouden en worden niet-gepubliceerde bestanden zoals bedoeld toegevoegd.
- Na het wijzigen van overschrijvende bestanden slaagt
view:cacheen toont een nieuwe start de gewijzigde weergave.
Gerelateerde pagina’s
Views
Bekijk de basis van het maken van views, het doorgeven van data en het vooraf compileren.
Blade-templates
Bekijk hoe je layouts, includes en componenten gebruikt.
Versiecompatibiliteit beheren
Koppel wijzigingen in de afspraken van templates aan je releasebeleid.
Octane
Bekijk de levenscyclus en het herladen van langlopende applicaties.
Geraadpleegde primaire bronnen
- Officiële Laravel-documentatie: views van packages
- ServiceProvider: registratie van viewpaden
- FileViewFinder: zoekvolgorde en het bewaren van zoekresultaten
- VendorPublishCommand: voorwaarden voor het publiceren van bestanden
- ViewCacheCommand: verzamelen van viewpaden en compileren
- ViewClearCommand: verwijderen van gecompileerde bestanden
- Compiler: controle van wijzigingstijden