Skip to main content
Bij een package waarvan gebruikers de templates voor schermen of e-mails kunnen aanpassen, volstaat het niet om alleen de views te publiceren. Je hebt ook een afspraak nodig waarmee je het package kunt bijwerken terwijl de gepubliceerde bestanden blijven bestaan. Als je een Blade-bestand in het package aanpast, betekent dat niet automatisch dat de applicatie van de gebruiker dat bestand ook rendert. Deze pagina bouwt voort op Laravel-packages ontwikkelen en behandelt de keuze van views, het publiceren van bestanden en caching als afzonderlijke onderwerpen. Als officiële documentatie is Laravel 13 gebruikt en voor de implementatie van het framework de nieuwste release 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
Het bestand van het package plaats je in resources/views/deliveries/show.blade.php. De punten in de viewnaam worden bij het zoeken omgezet in mapscheidingstekens.
resources/views/deliveries/show.blade.php
De namespace van een view staat los van de Composer-packagenaam en de PHP-namespace. Hier vormt courier, het tweede argument van loadViewsFrom(), de afspraak voor viewverwijzingen en voor de map waarin overschrijvingen staan.

Per bestand naar overschrijvingen zoeken

Wanneer view 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.
Met deze registratie wordt de hele viewsmap gepubliceerd. Als niet alles overschreven hoeft te worden, kun je de inhoud controleren en alleen de bestanden bewaren die je aanpast, of alleen de benodigde bestanden handmatig naar hetzelfde relatieve pad kopiëren. Ook een onbewerkte kopie geldt namelijk als overschrijving zolang die bestaat.
Gepubliceerde templates worden niet automatisch gesynchroniseerd met updates van het package. Als een oude kopie voorrang krijgt en je alleen het package aanpast, worden de wijzigingen in die view niet doorgevoerd. Ook bij het oplossen van weergavefouten of het wijzigen van formulieren moet je vergelijken met de overschrijvende bestanden.

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 versie trackingCode 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.show niet zonder goede reden.
  • Leg de doorgegeven variabelen, hun types en of ze verplicht of optioneel zijn vast.
  • Neem ook de verwijzingen van @include en @extends en 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.
Bied gebruikers een procedure om de oude en nieuwe views van het package te vergelijken en de benodigde wijzigingen handmatig over te nemen in hun aangepaste bestanden. Bestanden die niet meer overschreven hoeven te worden, kun je verwijderen nadat je de wijzigingen hebt veiliggesteld met een back-up of versiebeheer. Dan wordt weer de view van het package gebruikt.

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.
Dit proces herschrijft geen gepubliceerde Blade-bestanden en verandert de zoekvolgorde van views niet. Bestaat er een oud overschrijvend bestand, dan wordt dat bestand ook na het opnieuw opbouwen van de cache gekozen. Compileer bij een deployment pas nadat de code en de overschrijvende bestanden zijn bijgewerkt. Wil je tijdens de ontwikkeling de gecompileerde bestanden verwijderen en opnieuw renderen, gebruik dan het volgende commando.
Als de gewone timestampcontrole is ingeschakeld, vergelijkt de Blade-compiler de wijzigingstijd van het bronbestand met die van het gecompileerde bestand. Omdat er ook opzetten zijn waarin de timestampcontrole is uitgeschakeld, moet je het opnieuw opbouwen bij een deployment niet alleen aan deze automatische detectie overlaten.

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:cache en 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

Laatst gewijzigd op 4 oktober 2026