v13.34.0.
Registrazione e pubblicazione sono processi distinti
loadViewsFrom() registra un percorso di ricerca per un namespace. publishes() registra l’origine e la destinazione della copia, ma la copia vera e propria la esegue vendor:publish. Nell’esempio seguente puoi usare courier::deliveries.show anche senza pubblicare nulla.
src/CourierServiceProvider.php
resources/views/deliveries/show.blade.php. Durante la ricerca, i punti nel nome della view vengono convertiti in separatori di directory.
resources/views/deliveries/show.blade.php
courier, passato come secondo argomento di loadViewsFrom(), a costituire il contratto per i riferimenti alle view e per la directory di override.
La destinazione dell’override si cerca file per file
ServiceProvider::loadViewsFrom(), quando view viene risolto, controlla in ordine i percorsi della configurazione view.paths. Se in un percorso esiste la directory vendor/courier, la aggiunge al namespace e, per ultimo, aggiunge il percorso del pacchetto.
FileViewFinder cerca in ordine nei percorsi di quel namespace e restituisce il primo file trovato. In una configurazione che usa il resources/views standard, l’ordine è il seguente.
Non si tratta di uno scambio dell’intera directory. Anche se l’utente sovrascrive solo deliveries/show.blade.php, le altre view non sovrascritte vengono caricate dal pacchetto.
In una configurazione con più
view.paths, anche le destinazioni di override possono essere più di una. resource_path('views/vendor/courier') è la destinazione di pubblicazione di questo esempio, non un meccanismo che limita la ricerca a quella sola directory. Usa un namespace specifico del pacchetto ed evita progetti in cui più provider aggiungono percorsi allo stesso nome.Personalizzare solo le view necessarie
L’utente può copiare i template con il comando seguente. Specifica provider e tag per non coinvolgere altre risorse.La ripubblicazione non unisce le differenze
Di normaVendorPublishCommand salta la copia se esiste già un file di destinazione con lo stesso nome. --force sovrascrive i file esistenti. Anche --existing è un’opzione che “sovrascrive i file già pubblicati”, non una modalità che preserva le modifiche dell’utente.
Nessuno di questi metodi è un merge che confronta la vecchia versione, la nuova versione e le modifiche dell’utente. Nemmeno rimuove automaticamente dalla destinazione le view eliminate dal pacchetto. Non ridurre la procedura di aggiornamento a “ripubblicare lo stesso tag”.
Mantenere anche le view come API pubblica
Non solo i nomi delle view, ma anche i dati ricevuti e i componenti referenziati influiscono sulle personalizzazioni degli utenti. Per esempio, se nella nuova versionetrackingCode viene rinominato, gli utenti che conservano il vecchio template non riceveranno più dal nuovo codice il valore di cui hanno bisogno.
Prima del rilascio verifica i seguenti contratti.
- Non modificare con leggerezza il namespace e i nomi delle view come
deliveries.show. - Documenta le variabili passate, i loro tipi e quali sono obbligatorie o facoltative.
- Includi tra le modifiche anche i riferimenti di
@includee@extendse le props dei componenti Blade. - Indica nelle note di rilascio le view modificate e le modifiche da applicare alle vecchie versioni già pubblicate.
La cache di Blade non aggiorna i file di override
view:cache precompila i template Blade in PHP. ViewCacheCommand esegue prima view:clear, poi raccoglie i normali percorsi delle view e i percorsi registrati nei namespace per individuare cosa compilare.
Distinguerla dalla cache dei risultati di ricerca
FileViewFinder::find() salva il percorso trovato nell’array $views di quell’istanza del Finder. Inoltre, l’esistenza della directory di override viene verificata nella callback di loadViewsFrom(). Aggiungere una nuova directory dopo l’avvio non la inserisce automaticamente nei percorsi di ricerca già registrati.
view:clear non è un comando che cancella in blocco lo stato del Finder mantenuto da altri processi in esecuzione. Con processi di lunga durata come Octane, ricaricali seguendo la normale procedura di deploy. Il metodo flush() del Finder cancella i risultati di ricerca, ma non registra nuove directory di override.
Cosa verificare prima del rilascio
Oltre ai test del pacchetto, verifica le seguenti combinazioni in un’applicazione che lo usa. Un test che renderizza solo il template più recente non può verificare la compatibilità per gli utenti che hanno pubblicato una versione precedente.- Senza pubblicazione, viene renderizzata la view del pacchetto.
- Sovrascrivendo un solo file, solo quel file ha la priorità e gli altri ricadono sul pacchetto.
- Anche mantenendo i template pubblicati della vecchia versione, il rendering funziona con i dati passati dalla nuova versione.
- La ripubblicazione normale preserva le personalizzazioni e l’aggiunta dei file non ancora pubblicati avviene come previsto.
- Dopo aver modificato i file di override,
view:cacheva a buon fine e al nuovo avvio viene mostrata la versione modificata.
Pagine correlate
View
Le basi della creazione delle view, del passaggio dei dati e della precompilazione.
Template Blade
Come usare layout, include e componenti.
Gestione della compatibilità tra versioni
Collega le modifiche al contratto dei template alla politica di rilascio.
Octane
Il ciclo di vita e il ricaricamento delle applicazioni di lunga durata.
Fonti primarie consultate
- Documentazione ufficiale di Laravel: view dei pacchetti
- ServiceProvider: registrazione dei percorsi delle view
- FileViewFinder: ordine di ricerca e conservazione dei risultati
- VendorPublishCommand: condizioni di pubblicazione dei file
- ViewCacheCommand: raccolta dei percorsi delle view e compilazione
- ViewClearCommand: eliminazione dei file compilati
- Compiler: controllo dell’orario di modifica