Transizione all'architettura a pacchetto
Perché l'attuale modello gestito dalla radice è problematico
Attualmente WebBlocks CMS viene distribuito come applicazione Laravel gestita dalla radice, in cui i file del core del CMS risiedono direttamente nella radice dell'installazione accanto ai file applicativi di proprietà dell'utente. Quel modello rende fragili gli aggiornamenti, perché il codice di prodotto del CMS e il codice di progetto specifico dell'installazione condividono lo stesso file system di primo livello.
Quando gli aggiornamenti del CMS vengono applicati sostituendo o copiando i file gestiti dalla radice, non è garantito che i file del core rimossi a monte scompaiano dalle installazioni a valle. Un file del core rimosso ma rimasto obsoleto può restare nella radice dell'installazione, continuare a essere autocaricato o renderizzato da Laravel e sovrascrivere silenziosamente il comportamento più recente distribuito. Questa è esattamente la classe di problemi confermata di recente da un file Blade obsoleto nella radice di un'installazione a valle.
L'architettura attuale mantiene inoltre gli aggiornamenti del CMS strettamente accoppiati allo stato di Git e alla sincronizzazione dei file sull'intera radice. Ciò rende più difficile ragionare sui confini di proprietà, preservare in sicurezza le personalizzazioni specifiche dell'installazione e rendere gli aggiornamenti prevedibili sulle installazioni esistenti.
Direzione obiettivo
L'architettura obiettivo è un pacchetto Laravel gestito con Composer:
- Nome del pacchetto:
fklavyenet/webblocks-cms - Percorso di installazione:
vendor/fklavyenet/webblocks-cms - Fonte di verità canonica del pacchetto installato:
vendor/fklavyenet/webblocks-cms
Nel modello obiettivo, il codice del core del CMS viene installato e aggiornato come un normale pacchetto Composer anziché essere copiato nella radice del progetto Laravel di proprietà dell'utente.
Questo significa che:
- il codice sorgente PHP del CMS appartiene a
src/del pacchetto - le risorse del pacchetto Laravel restano in
config/,database/,resources/,routes/,public/estubs/a livello di pacchetto src/non è la destinazione di ogni file del pacchetto- la radice Laravel di proprietà dell'utente dovrebbe possedere
app/,config/,database/,public/site/,resources/,routes/,storage/ecomposer.json
System Update deve allinearsi a questa disposizione del pacchetto Composer. Nei consumatori nativi del pacchetto installato, l'updater applica gli artefatti di release radicati nel pacchetto a vendor/fklavyenet/webblocks-cms; non deve mantenere packages/webblocks-cms come seconda copia di runtime attiva e aggiornata. Un albero packages/webblocks-cms appartiene soltanto ai checkout di sviluppo mantenuti dai sorgenti o a residui legacy della transizione.
Quando un'installazione vendor Composer legacy ha la forma di un repository, System Update normalizza vendor/fklavyenet/webblocks-cms alla radice piatta del pacchetto. Dopo la normalizzazione, src/, docs/, routes/, resources/, database/, public/, config/ e stubs/ risiedono direttamente sotto vendor/fklavyenet/webblocks-cms; i residui della radice del repository come artisan, app/, bootstrap/, packages/, plugins/ e tests/ vengono rimossi dalla sostituzione della radice del pacchetto.
project/ può rimanere temporaneamente come livello di compatibilità durante la transizione, ma non dovrebbe restare il modello di personalizzazione obbligatorio a lungo termine per il comportamento specifico dell'installazione.
La direzione prevista per il progetto iniziale è uno starter Laravel separato, come fklavyenet/webblocks-cms-starter, in cui la radice del progetto di proprietà dell'utente compone il pacchetto CMS invece di incorporare direttamente tutti i file del core del CMS.
Stato attuale di prontezza per i consumatori nella v1.32.8
La prontezza del pacchetto per i consumatori è ormai avviata, ma è volutamente parziale ed esplicita:
- i consumatori con una nuova installazione Laravel possono installare il pacchetto ed eseguire
webblocks:install - il pacchetto utilizza un percorso di migrazione mirato per le installazioni pulite dei consumatori, invece di ripercorrere l'intera catena storica di migrazioni della radice
- le migrazioni del pacchetto del repository di manutenzione restano disabilitate da guardie e inerti per impostazione predefinita
App\Models\Userresta il confine temporaneo di autenticazione del consumatore nellav1.32.8- l'installer del pacchetto applica automaticamente una patch a
App\Models\Usercon un trait del pacchetto e scrive prima un backup con marca temporale - login, logout, avviso di installazione, protezione dell'area di amministrazione, home pubblica, viste e asset di proprietà del pacchetto sono ora sufficienti per il primo percorso pulito del consumatore
- questo non è ancora un repository starter separato e non rimuove ancora il confine
Userdi proprietà dell'applicazione
Stato attuale della pulizia dell'app radice
L'albero reale dell'app consumatrice Composer può essere minimale mentre il runtime del CMS viene caricato da vendor/fklavyenet/webblocks-cms. Il repository di manutenzione rispecchia ora più fedelmente quel confine: la app/ della radice non conserva più per impostazione predefinita i wrapper corrispondenti a quelli del pacchetto.
Categorie di wrapper rimosse:
- comandi di console corrispondenti a quelli del pacchetto, tranne
ProjectInitCommand, di proprietà dell'host - controller di amministrazione e pubblici del CMS e middleware corrispondenti a quelli del pacchetto le cui rotte ora puntano a classi del pacchetto, tranne il middleware di redirect all'installazione della shell di manutenzione
- form request di amministrazione e pubblici corrispondenti a quelli del pacchetto
- mailable corrispondenti a quelli del pacchetto
- modelli del CMS corrispondenti a quelli del pacchetto
- classi di supporto corrispondenti a quelle del pacchetto nei domini di blocchi, media, pagine, siti, sistema, aggiornamenti, ricerca, visitatori e trasferimento/promozione operativi
Elementi volutamente ancora di proprietà della radice o rinviati:
app/Models/User.php, ilController.phpdi base e i service provider restano file della shell Laravel di proprietà dell'host.- i file di autenticazione, profilo e installazione, incluso il middleware di redirect all'installazione, restano di proprietà dell'host finché il confine starter/installazione non verrà deliberatamente riprogettato.
- autenticazione, profilo, installazione e livello di progetto restano confini dell'host o della transizione.
- gli shim legacy per gli asset
Asset,AssetFolder,BlockAsseteApp\Support\Assets\...sono stati rimossi; i modelli media e le classi di supporto del pacchetto sono ora la superficie autorevole di runtime e di test. App\Support\WebBlocksè stato rimosso; la configurazione, le viste e i test della radice usano oraWebBlocks\Cms\Support\WebBlockscome fonte dell'identità e della versione del prodotto.- le directory vuote di
app/nella radice corrispondenti a quelle del pacchetto vengono rimosse anziché mantenute come marcatori di transizione. - le migrazioni della radice, gli override di configurazione, il
public/cmsdi runtime, i wrapper di compatibilità Blade della radice e i wrapper dei seeder della radice restano fuori da questa pulizia.
La pulizia migliora la transizione al pacchetto e la prontezza dello starter, perché il repository di manutenzione verifica ora la stessa ipotesi di app minimale di un nuovo consumatore del pacchetto. Tuttavia non rende il repository completamente pronto come starter: installazione/autenticazione, User, l'autorità delle migrazioni della radice, l'autorità operativa di aggiornamento/installazione della radice e i percorsi di compatibilità degli asset di runtime della radice restano gli ostacoli finali.
Architettura di aggiornamento obiettivo
Il flusso di aggiornamento a lungo termine dovrebbe essere gestito da Composer e dal pacchetto e indipendente da Git.
L'architettura di aggiornamento obiettivo è:
- nessuna copia di file del core del CMS sull'intera radice
- core del CMS installato e aggiornato tramite pacchetti Composer
- passi controllati di aggiornamento del runtime dopo l'aggiornamento del pacchetto, comprese le migrazioni
- svuotamento della cache dove necessario
- riparazione esplicita del catalogo come flusso di manutenzione separato dell'operatore quando serve
- pubblicazione o sincronizzazione controllata degli asset solo quando è realmente necessario
Questo mantiene i file della radice di proprietà dell'installazione separati dai file del core del CMS di proprietà del pacchetto e impedisce che i file del core del CMS rimossi permangano a tempo indeterminato nelle installazioni a valle solo perché un tempo esistevano nella radice.
Confine della build degli asset
Il pacchetto Composer e il repository di manutenzione sono consumatori di asset statici, non host di una catena di build frontend. WebBlocks CMS non deve distribuire né richiedere Vite, il plugin Vite di Laravel, Tailwind, npm, Node, file di lock dei pacchetti, public/build, public/hot o hook di runtime @vite per gli asset di proprietà del CMS.
Gli asset di proprietà del CMS appartengono a public/cms nella radice per il runtime di manutenzione e a packages/webblocks-cms/public/cms del pacchetto per gli artefatti di release. WebBlocks UI resta un progetto UI a monte consumato tramite asset pubblicati e fissati a una versione, e WebBlocks UI Manager resta il plugin operatore di prima parte per i flussi di pubblicazione di release e CDN. Non spostate la compilazione dei sorgenti di WebBlocks UI, gli script di build npm, la generazione della dist o le ipotesi sul file hot nel core del CMS o nel suo pacchetto di release.
Confini di proprietà
Percorsi CMS obiettivo di proprietà del pacchetto:
packages/webblocks-cms/src/durante la fase di transizione interna al repository- successivamente
vendor/fklavyenet/webblocks-cms/src/negli ambienti installati config/del pacchettodatabase/del pacchettoresources/del pacchettoroutes/del pacchettopublic/del pacchettostubs/del pacchetto
Percorsi obiettivo della radice di progetto di proprietà dell'utente:
app/config/database/public/site/resources/routes/storage/composer.json
Questa suddivisione lascia la proprietà dell'applicazione Laravel all'installazione, mentre la proprietà del prodotto CMS passa al pacchetto.
Confine di coesistenza con il prodotto host
Le installazioni del CMS orientate al pacchetto devono preservare i confini dell'applicazione host quando il CMS è installato accanto a un altro prodotto Laravel. Il CMS dovrebbe evitare collisioni di rotte, configurazione, viste e tabelle con l'app host e non deve presupporre che la rotta /admin dell'app host appartenga al CMS.
Il prefisso canonico di amministrazione del CMS è /webadmin, con un prefisso configurabile che resta la direzione obiettivo per una maggiore flessibilità di coesistenza futura. Il login di proprietà dell'host e le decisioni di autorizzazione di proprietà del CMS sono documentati in Coexistence. Gli asset statici del CMS restano sotto public/cms e vengono serviti da /cms/....
Quando le rotte di autenticazione del CMS di proprietà del pacchetto sono attive, /webadmin/login fa parte del confine del pacchetto. La sua superficie Blade deve restare sotto il namespace di viste webblocks-cms::, utilizzare la shell di autenticazione guest di WebBlocks UI, caricare il CSS/JS fissato di WebBlocks UI insieme a /cms/css/guest.css e risolvere gli asset di brand e logo del prodotto da /cms/brand. Gli asset di brand del prodotto CMS devono fornire varianti normale, per superficie scura, su accento/inversa e ad alto contrasto per favicon e scheda del browser, così che il contrasto dell'autenticazione e della shell di prodotto sia risolto con asset espliciti anziché con filtri CSS.
I prefissi delle rotte di amministrazione non devono riutilizzare segmenti fisici di directory di asset pubblici. Il prefisso di amministrazione ritirato /cms collideva con la directory di asset attiva public/cms, perché try_files di Nginx può risolvere /cms/ come directory prima che Laravel riceva la rotta. Per questo l'attuale architettura a pacchetto mantiene /webadmin/... per l'amministrazione del CMS e per le rotte di login del pacchetto, riserva /cms/... ai soli asset statici e vieta alias /cms, redirect /cms e rotte /admin di proprietà del CMS ripristinate. Il vecchio passaggio di consegne public/cms/index.php non fa parte del confine del pacchetto e deve restare assente sia dagli asset pubblici della radice sia da quelli del pacchetto.
Fasi della migrazione
Fase 0: documentare e predisporre lo scheletro
Introducete il piano dell'architettura a pacchetto e create uno scheletro di pacchetto interno al repository senza spostare ancora il codice di runtime. Il comportamento dell'app radice resta invariato.
Fase 1: bootstrap minimo del pacchetto
Aggiungete il service provider del pacchetto e il collegamento Composer con percorso locale, così che il pacchetto esista come una vera unità installabile all'interno del repository. Mantenete la logica di boot volutamente minima ed evitate di modificare il comportamento a runtime.
Fase 2A: contratto di bootstrap
Affinate il service provider del pacchetto affinché definisca il contratto di bootstrap per le future risorse di proprietà del pacchetto, senza renderle ancora autorevoli.
In questa fase il provider può preparare in sicurezza il caricamento protetto e la registrazione della pubblicazione per config/, routes/, resources/views/, database/migrations/, public/ e stubs/ del pacchetto, ma soltanto quando esistono file reali del pacchetto.
L'attuale comportamento a runtime della radice resta invariato perché lo scheletro del pacchetto contiene solo segnaposto. Finché i file di runtime non verranno effettivamente spostati nel pacchetto nelle fasi successive, l'applicazione Laravel della radice resta la fonte autorevole per rotte, viste, configurazione, migrazioni e asset pubblici attivi del CMS.
Il primo percorso di configurazione predefinita di proprietà del pacchetto è ormai avviato con config/webblocks-updates.php del pacchetto. Durante la transizione quel file del pacchetto fornisce i valori predefiniti di proprietà del CMS, mentre il config/webblocks-updates.php esistente nella radice resta al suo posto come override a livello di installazione e file di configurazione applicativa retrocompatibile.
Classificazione della configurazione
Gli attuali file di config/ nella radice ricadono in due gruppi di transizione.
Candidati a valori predefiniti del prodotto CMS:
webblocks-cms.phpcms.phpcontact.phpdemo_media.phpwebblocks-updates.php
Configurazione di proprietà dell'app Laravel o dell'installazione che dovrebbe restare della radice:
app.phpauth.phpcache.phpdatabase.phpfilesystems.phplogging.phpmail.phpqueue.phpservices.phpsession.php
L'attuale regola di transizione a basso rischio consiste nello spostare la configurazione predefinita di proprietà del CMS soltanto quando ciò preserva un comportamento di prodotto stabile e una chiara semantica di override da parte dell'installazione. L'insieme dei valori predefiniti di proprietà del pacchetto comprende ora webblocks-cms.php, cms.php, contact.php, demo_media.php e webblocks-updates.php. I file di configurazione della radice per il comportamento esistente del CMS restano al loro posto durante la transizione come override a livello di installazione e punti di ingresso della configurazione applicativa retrocompatibili. webblocks-cms.php per ora è esclusivo del pacchetto e possiede i controlli di transizione: le rotte diagnostiche, le rotte pubbliche di stato, le rotte di stato dell'area di amministrazione e il caricamento delle migrazioni del pacchetto restano disabilitati per impostazione predefinita, mentre il caricamento delle rotte di amministrazione del pacchetto è abilitato affinché le rotte di amministrazione di proprietà del pacchetto possano diventare autorevoli.
Fase 2: spostare il codice sorgente chiaramente di proprietà del pacchetto
Iniziate a spostare il codice sorgente PHP di proprietà del CMS in src/ del pacchetto in piccole porzioni revisionabili, aggiornando i namespace e il bootstrap del service provider soltanto man mano che ciascuna area spostata è pronta.
Il bootstrap di console del pacchetto è ora dimostrato anche dal comando diagnostico di sola lettura webblocks:package-status. Quel comando è di proprietà del pacchetto, viene registrato solo in contesti di console e segnala la presenza del bootstrap del pacchetto senza modificare file, stato del database, cache, configurazione o stato di aggiornamento.
Il primo spostamento di codice sorgente PHP dovrebbe seguire criteri altrettanto conservativi: di proprietà del CMS, di piccole dimensioni, facile da comprendere, senza dipendenze da database o Eloquent, senza dipendenze da controller o request e con aggiornamenti di riferimenti circoscritti. La prima classe spostata è SearchTextNormalizer, un helper puro per il testo di ricerca ora di proprietà di src/Support/Search/ del pacchetto.
Attuale confine del supporto alla ricerca:
- ora di proprietà del pacchetto:
SearchTextNormalizer,PublicSearchRebuildResult,PublicSearchIndexer,PublicSearchQuery,PublicSearchSchema,SearchablePageResolver,BlockSearchTextExtractorRegistryeReindexesPublicSearch - al momento nessuna classe di supporto di Search deve restare di proprietà della root per motivi specifici del progetto; lo shim root
App\Support\Search\ReindexesPublicSearchè stato rimosso
Confine attuale dell'audit del Support non legato a Search:
- in questo passo dell'audit non è stato spostato nessun ulteriore helper di Support non legato a Search, perché nessuno dei candidati esaminati soddisfaceva gli attuali criteri a basso rischio per il passaggio al pacchetto
MediaKindResolverè piccolo e deterministico, ma attualmente dipende dalle costanti diApp\Models\Mediaed è referenziato da un percorso di controller, quindi non è ancora abbastanza indipendente per questa faseDatabaseExecutionStrategyResolverresta per ora di proprietà della root, perché incide direttamente sulla strategia di esecuzione di dump o ripristino del database, sull'ispezione dell'ambiente e sulla sicurezza a runtime di backup o ripristinoSiteHandleresta per ora di proprietà della root, perché è utilizzato da modelli, request e flussi di trasferimento o clonazione dei siti, quindi spostarlo ora attraverserebbe troppo presto i confini di routing, portabilità e persistenzaSiteDomainNormalizerresta per ora di proprietà della root, perché è ancora utilizzato da modelli, request, risoluzione delle rotte e migrazioni, a conferma della precedente valutazione del rischio
Confine del supporto Contact:
- ora di proprietà del pacchetto:
ContactMessageNotificationResult - per ora di proprietà della root:
ContactMessageNotifier, perché gestisce ancora le chiamate di trasporto della posta, l'interazione con il modello dei contatti e la risoluzione dei destinatari basata sulla configurazione ContactMessageNotificationResultè stato spostato in sicurezza perché è un piccolo oggetto risultato immutabile, senza accoppiamento a modelli, database, request, configurazione, posta, migrazioni o payload serializzati, e richiedeva solo l'aggiornamento di un riferimento circoscritto nel notifier
Confine del supporto per i tipi di blocco:
- ora di proprietà del pacchetto:
BlockTypeContract - per ora di proprietà della root:
BlockTypeContractRegistry, perché dipende ancora dai modelli dei blocchi, dalle definizioni di sincronizzazione del catalogo, dal comportamento del registro delle traduzioni, dall'ispezione dei percorsi delle risorse e dai flussi di audit o amministrazione della root che utilizzano quei contratti risolti BlockTypeContractè stato spostato in sicurezza perché è un piccolo DTO di contratto con stato impostato solo nel costruttore, oltre a una serializzazione in array deterministica, e senza accoppiamento a modelli, database, request, configurazione, effetti collaterali di comandi, migrazioni o payload serializzati
Confine del markup del layout di pagina:
- per ora di proprietà della root:
LayoutMarkup LayoutMarkupnon è stato spostato in questo passo perché, benché sia piccolo e senza stato, è utilizzato direttamente dai form request del layout di pagina, dalla logica del gestore dei layout di pagina, dalla risoluzione del wrapper degli slot pubblici e da un form Blade di amministrazione; spostarlo ora attraverserebbe i confini di validazione delle request e di rendering pubblico all'interno dell'area più ampia Pages o PublicRendering, che resta intenzionalmente di proprietà della root
Confine del supporto di formattazione:
- ora di proprietà del pacchetto:
InlineRichTextRenderer - per ora di proprietà della root:
SafeRichTextRenderer, perché gestisce ancora il contratto di sanitizzazione HTML più ricco, il comportamento dei tag consentiti, le regole di parsing del DOM e la semantica di rendering pubblico del rich text InlineRichTextRendererè stato spostato in sicurezza perché è un piccolo formattatore deterministico, senza accoppiamento a modelli, database, request, configurazione, migrazioni o payload serializzati, e richiedeva solo l'aggiornamento di un riferimento circoscritto in Blade e negli unit test
Mappa di migrazione dei sorgenti di Support:
- Search: di proprietà del pacchetto per l'attuale supporto a runtime, incluso il trait di reindicizzazione usato dai modelli del pacchetto. Gli shim root
App\Support\Search\...non devono essere ripristinati. - Formatting: candidato dopo l'isolamento delle dipendenze.
InlineRichTextRendererè ora di proprietà del pacchetto come helper di formattazione a basso rischio, mentreSafeRichTextRendererresta di proprietà della root perché definisce il comportamento di sanitizzazione a rischio più elevato. - BlockTypes: candidato dopo l'isolamento delle dipendenze.
BlockTypeContractè un piccolo value object, ma il namespace è ancorato aBlockTypeContractRegistry, alle rotte di amministrazione e a un comando di audit da console nella root. - BlockTypes: candidato dopo l'isolamento delle dipendenze.
BlockTypeContractè ora di proprietà del pacchetto come spostamento circoscritto di un value object, ma il namespace è ancora ancorato aBlockTypeContractRegistry, alle rotte di amministrazione e a un comando di audit da console nella root. - Media and Assets: i modelli media e le classi di supporto di proprietà del pacchetto sono autoritativi per gli shim legacy degli asset ormai rimossi. Il lavoro rimanente sui media deve evitare di ripristinare i wrapper root
Asset,AssetFolder,BlockAssetoApp\Support\Assets\.... - Pages and PublicRendering: di proprietà della root fino a una fase di migrazione dedicata. Queste classi controllano la risoluzione delle rotte, la selezione del layout, gli asset di pagina, i wrapper degli slot, i presenter pubblici, la duplicazione o importazione delle pagine e il comportamento di rendering pubblico, con accoppiamento a modelli e request in tutto il percorso.
- Pages and PublicRendering: di proprietà della root fino a una fase di migrazione dedicata.
LayoutMarkupè stato esaminato come possibile eccezione, ma resta di proprietà della root perché poggia ancora direttamente sulle request di layout di pagina, sulla risoluzione dei wrapper degli slot e sul rendering delle viste di amministrazione, anche se la sua logica è priva di stato. - Blocks: di proprietà della root fino a una fase di migrazione dedicata. Quest'area gestisce le scritture del payload dei blocchi, la persistenza delle traduzioni, l'eliminazione dei blocchi, la sincronizzazione del catalogo, l'estrazione di HTML attendibile e i registri pubblici con ambito di request, che poggiano direttamente sulla persistenza dei blocchi e sui contratti del renderer.
- SharedSlots and Revisions: di proprietà della root fino a una fase di migrazione dedicata. Queste classi dipendono da alberi di blocchi, tabelle delle revisioni, controlli di schema, righe di traduzione e semantica di ripristino o snapshot.
- Sites, Sites\\ExportImport e SitePromotion: di proprietà della root fino a una fase di migrazione dedicata. Queste aree sono strettamente accoppiate a modelli, routing, portabilità, archivi, payload serializzati di trasferimento, flussi di clonazione o eliminazione, backup di sicurezza della promozione e risoluzione dei siti pubblici.
- System and System\\Updates: di proprietà della root fino a una fase di migrazione dedicata. Queste classi gestiscono la persistenza delle impostazioni, lo stato della versione installata, il backup o ripristino, la validazione SQL, il flusso di download o estrazione degli aggiornamenti e la strategia di esecuzione del database.
- Install and ProjectLayer: da non spostare ancora. Queste classi toccano il flusso dell'installer, le scritture su
.env, il caricamento di rotte o provider, i controlli dello stato di installazione e i confini di personalizzazione della root di progetto. - Navigation, Locales, Users, Visitors, Contact and Icons: candidati dopo l'isolamento delle dipendenze. Ogni gruppo contiene alcuni helper o oggetti risultato più piccoli, ma le implementazioni attuali dipendono ancora da modelli, autenticazione, posta, ispezione dello schema, chiamate HTTP o comportamento a runtime basato sulle impostazioni.
- Navigation, Locales, Users, Visitors, Contact and Icons: candidati dopo l'isolamento delle dipendenze.
ContactMessageNotificationResultè ora di proprietà del pacchetto come spostamento circoscritto di un value object, mentre i gruppi rimanenti dipendono ancora da modelli, autenticazione, posta, ispezione dello schema, chiamate HTTP o comportamento a runtime basato sulle impostazioni. - Admin, Audit and Database: candidati dopo l'isolamento delle dipendenze.
AdminPagination,CurrentActorResolvereDestructiveDatabaseCommandGuardsono piccoli, ma ciascuno dipende ancora dalle impostazioni della root, dall'autenticazione o dagli hook di sicurezza dell'applicazione. - WebBlocks:
WebBlocks\Cms\Support\WebBlocks, di proprietà del pacchetto, è ora la fonte dell'identità e della versione del prodotto sia per i consumatori del pacchetto sia per la root del repository di manutenzione.
Nota sul checkpoint dei sorgenti della fase 2:
- i primi spostamenti a basso rischio di helper e value object si sono conclusi correttamente fino a
v1.31.60 - l'ambiente di sviluppo locale collegato al pacchetto è stato aggiornato correttamente dopo
v1.31.60, confermando che il checkpoint resta compatibile con il flusso di lavoro locale mantenuto - gli spostamenti opportunistici di sorgenti PHP a basso rischio sono ora intenzionalmente sospesi
- non continuate a spostare classi con forte componente di runtime senza un piano di fase dedicato e un audit delle dipendenze
Blocchi attuali per i gruppi a rischio più elevato:
- accoppiamento diretto con
App\Models\...o con query Eloquent in Search, Pages, Blocks, Sites, Navigation, Locales, Icons, Visitors e System - accoppiamento a request, rotte, controller o viste in Admin, Pages, PublicRendering, Formatting e in alcuni helper di BlockTypes
- controlli di schema, di forma delle migrazioni o di esistenza delle tabelle in Search, SharedSlots, Revisions, Visitors, Install e System
- accoppiamento a configurazione, env, HTTP, posta, filesystem, processi, backup, aggiornamenti e runtime locale in Contact, Icons, Install, System e Updates
- accoppiamento a payload serializzati di archivio o trasferimento in Sites\\ExportImport, SitePromotion, importazione delle pagine e helper di compatibilità per gli asset legacy
Fase 3: spostare le risorse del pacchetto
Spostate nelle cartelle di risorse Laravel del pacchetto la configurazione, le rotte, le viste, le migrazioni, i seeder, gli asset pubblici e gli stub chiaramente di proprietà del pacchetto. Introducete il comportamento di caricamento e pubblicazione del pacchetto in modo incrementale, non tutto insieme.
L'attuale porzione di seeder della fase 3 copre ora il confine dei seeder di catalogo di proprietà del pacchetto, oltre al relativo aggregatore di proprietà del pacchetto:
- ora di proprietà del pacchetto:
CoreCatalogSeeder,IconCatalogSeeder,PageTypeSeeder,LayoutTypeSeeder,SlotTypeSeederinpackages/webblocks-cms/database/seeders/ - gli entrypoint di compatibilità della root restano in
database/seeders/, così le installazioni esistenti, i test e gli attuali entrypoint di runtime o di aggiornamento possono continuare a chiamareDatabase\Seeders\... - il
CoreCatalogSeederdi proprietà del pacchetto resta solo uno spostamento di proprietà: continua a delegare aPageLayoutSeedereBlockTypeSeeder, di proprietà della root, e l'attualeDatabaseSeederroot insieme agli entrypoint di aggiornamento continua a richiamare il wrapper di compatibilità della root - restano per ora di proprietà della root:
PageLayoutSeeder,BlockTypeSeeder,DatabaseSeedere i comandi post-installazione attivi di System Update - in questa fase la proprietà dei seeder da parte del pacchetto riguarda solo la migrazione di namespace e confini, non un cambiamento dell'attuale autorità di aggiornamento della root
Fase successiva: confine delle risorse del pacchetto
Il focus successivo della transizione dopo v1.31.60 è la proprietà delle risorse del pacchetto, non altri spostamenti opportunistici di helper.
v1.31.62 Pilota del confine delle risorse del pacchetto
Il checkpoint v1.31.62 trasforma il confine delle risorse del pacchetto in un pilota più esplicito e verificabile, senza trasferire ancora la proprietà attiva a runtime.
- le directory
routes/,resources/views/,database/migrations/,public/estubs/del pacchetto esistono ora come directory di confine del pacchetto esplicitamente riservate, con file marcatori che documentano l'intento di proprietà futura - i valori predefiniti di configurazione del pacchetto restano di proprietà del CMS nella cartella
config/del pacchetto - i file di configurazione corrispondenti nella root restano il livello di override a livello di installazione e gli entrypoint di configurazione dell'applicazione retrocompatibili
- il service provider del pacchetto mantiene la pubblicazione del pacchetto esplicita e contrassegnata da tag, ma la pubblicazione resta inerte a meno che uno sviluppatore non esegua intenzionalmente
vendor:publish - il namespace delle viste del pacchetto
webblocks-cmsè ora registrato come pilota sicuro del confine del pacchetto, senza modificare l'attuale risoluzione delle viste pubbliche o di amministrazione della root - rotte, viste, migrazioni, asset pubblici e stub del pacchetto non costituiscono ancora una proprietà autoritativa e attiva a runtime in questa fase
webblocks:package-statusora riporta, in modo strettamente di sola lettura, lo stato delle risorse del pacchetto: riservate rispetto a popolate
Questo pilota non sposta rotte, viste, migrazioni o asset pubblici attivi della root, né controller, request, modelli, servizi o il comportamento di System Update.
v1.31.63 Pilota di attivazione del namespace delle viste del pacchetto
Il checkpoint v1.31.63 trasforma il namespace delle viste del pacchetto, finora riservato, in un confine diagnostico concreto e verificabile di proprietà del pacchetto, senza modificare la proprietà attiva a runtime.
- il file
resources/views/diagnostics/package-status.blade.phpdel pacchetto esiste ora come vera vista Blade diagnostica interna di proprietà del pacchetto - la vista diagnostica viene renderizzata solo tramite il namespace
webblocks-cms::e non è esposta da alcuna rotta pubblica o di amministrazione webblocks:package-statuspuò ora eseguire facoltativamente--view-checkper renderizzare quella vista diagnostica in modo strettamente di sola lettura e confermare che il namespace delle viste del pacchetto si risolve correttamente- l'output predefinito di
webblocks:package-statusresta leggero e di sola lettura, mentre il controllo facoltativo della vista non esegue comunque scritture di file, di cache, di configurazione, di database né modifiche allo stato di installazione - le viste pubbliche e di amministrazione attive della root restano autoritative e in questa fase non cambia alcun percorso di vista della root né la proprietà delle rotte a runtime
Questo pilota dimostra il caricamento del namespace delle viste del pacchetto con un file Blade reale di proprietà del pacchetto, evitando intenzionalmente qualsiasi spostamento delle viste pubbliche o di amministrazione attive della root.
v1.31.64 Pilota del confine delle rotte del pacchetto
Il checkpoint v1.31.64 trasforma il confine delle rotte del pacchetto, finora riservato, in un pilota di rotte diagnostiche concreto e verificabile, senza modificare la proprietà attiva delle rotte.
- il file
routes/diagnostics.phpdel pacchetto esiste ora come vero file di rotte diagnostiche di proprietà del pacchetto, per futuri diagnostici interni al pacchetto - il service provider del pacchetto mantiene il caricamento delle rotte diagnostiche del pacchetto esplicitamente protetto da
webblocks-cms.diagnostics.load_routes, così le rotte diagnostiche del pacchetto non vengono caricate nel runtime normale per impostazione predefinita webblocks:package-statusora riporta la presenza del confine delle rotte del pacchetto, lo stato del file di rotte del pacchetto, l'esistenza del file di rotte diagnostiche atteso, lo stato protetto del caricamento delle rotte e se la rotta diagnostica è attualmente caricata- le rotte pubbliche e di amministrazione attive della root restano autoritative e in questa fase nessun file di rotte pubbliche o di amministrazione della root è stato spostato o modificato
Questo pilota dimostra il confine delle rotte del pacchetto con un file di rotte diagnostiche reale di proprietà del pacchetto, evitando intenzionalmente qualsiasi migrazione della proprietà delle rotte pubbliche o di amministrazione attive.
v1.31.65 Completamento del confine del pacchetto
Il checkpoint v1.31.65 completa i restanti pilota del confine del pacchetto non legati al runtime per migrazioni, asset pubblici, stub e la destinazione del flusso di aggiornamento gestito da Composer, senza spostare la proprietà attiva a runtime.
- le cartelle del pacchetto
database/migrations/,public/estubs/conservano ora una documentazione più chiara dei marcatori di confine riservato per i loro futuri ruoli di proprietà del pacchetto - il caricamento delle migrazioni del pacchetto è ora esplicitamente disattivato tramite la guardia
webblocks-cms.boundaries.load_migrations, quindi le migrazioni del pacchetto restano inerti a meno che una successiva fase di runtime mirata non le colleghi intenzionalmente - la pubblicazione degli asset pubblici e degli stub del pacchetto resta esplicita e contrassegnata con tag di pacchetto; ora pubblica il primo marcatore di asset di proprietà del pacchetto e gli stub iniziali senza sostituire gli asset di runtime root né l'installer attuale
webblocks:package-statusriporta ora lo stato del confine delle migrazioni, del confine degli asset pubblici e del confine degli stub, la nota sull'obiettivo di aggiornamento gestito da Composer e la regola tuttora valida secondo cui il runtime root resta autorevole- il comportamento attuale di Composer nella root, il caricamento del runtime root e il comportamento di System Update restano invariati in questo checkpoint
Questo checkpoint completa la fase pilota dei confini del pacchetto. Il repository dispone ora di confini di pacchetto concreti e verificabili per rotte, viste, migrazioni, asset pubblici, stub e intento di aggiornamento gestito da Composer, mentre la proprietà del runtime attivo resta ancora nell'applicazione root.
Fase successiva: prima porzione di runtime reale di proprietà del pacchetto
- scegliete un'unica porzione di runtime ristretta, chiaramente di proprietà del pacchetto e con un rischio abbastanza basso da poter essere spostata da un capo all'altro
- spostatela solo quando le regole di proprietà di rotte, viste, migrazioni, asset o runtime sono esplicite per quella porzione
- verificate la compatibilità con le versioni precedenti e le aspettative di installazione prima che qualsiasi autorità di runtime attivo passi dalla root al pacchetto
- mantenete invariato il comportamento di System Update finché una successiva fase dedicata al flusso di aggiornamento non lo riprogetti intenzionalmente
Fasi 1-2 della migrazione del runtime di v1.32.0
La release v1.32.0 è il primo checkpoint con una porzione di runtime reale di proprietà del pacchetto. Avvia il lavoro sul runtime di proprietà del pacchetto con tre porzioni protette deliberatamente piccole, che dimostrano la proprietà del runtime da parte del pacchetto senza sostituire il runtime attuale del CMS.
Fase 1: porzione di runtime di diagnostica del pacchetto, protetta
- il file
routes/diagnostics.phpdel pacchetto punta ora a un controller di proprietà del pacchetto inpackages/webblocks-cms/src/Http/Controllers/Diagnostics/PackageDiagnosticsController.php - quel controller renderizza la vista di diagnostica esistente del pacchetto
webblocks-cms::diagnostics.package-status - la rotta di diagnostica resta comunque disattivata per impostazione predefinita dietro
webblocks-cms.diagnostics.load_routes - si tratta intenzionalmente solo di un percorso interno riservato del pacchetto e non sostituisce alcuna rotta di runtime amministrativa o pubblica della root
Fase 2A: prima porzione mirata di amministrazione del pacchetto
- il file
routes/admin.phpdel pacchetto ha introdotto originariamente una piccola porzione di stato del runtime amministrativo di proprietà del pacchetto:admin.webblocks-cms.runtime-status, ora montata su/webadmin/_webblocks-cms/runtime-status - quella rotta di stato utilizza un controller di proprietà del pacchetto e una vista Blade di proprietà del pacchetto in
packages/webblocks-cms/resources/views/admin/runtime-status.blade.php - il caricamento delle rotte amministrative del pacchetto è ora abilitato per impostazione predefinita e l'albero attivo delle rotte amministrative del CMS viene caricato dal file
routes/admin.phpdel pacchetto - la rotta riservata di stato amministrativo resta a sua volta disattivata per impostazione predefinita dietro
webblocks-cms.admin.load_status_route - le rotte amministrative del pacchetto mantengono, ove opportuno, i normali requisiti di middleware per installazione, autenticazione, accesso amministrativo e accesso di sistema del super admin
- la proprietà del runtime amministrativo attivo è ora del pacchetto per Pages, Blocks, Media, Shared Slots, Navigation, Block Types, Page Layouts, Sites, Site Domains, Site Variables e Locales, mentre Users, System, installazione/aggiornamento, backup/ripristino, esportazione/importazione, promozione, autenticazione/profilo, migrazioni e asset di runtime root restano di proprietà della root
Fase 2B: prima porzione pubblica mirata del pacchetto
- il file
routes/public.phpdel pacchetto ha introdotto originariamente una piccola porzione di stato del runtime pubblico di proprietà del pacchetto:webblocks-cms.public.runtime-statussu/_webblocks-cms/runtime-status - quella rotta utilizza un controller di proprietà del pacchetto e una vista Blade di proprietà del pacchetto in
packages/webblocks-cms/resources/views/public/runtime-status.blade.php - il caricamento delle rotte pubbliche del pacchetto è ora abilitato per impostazione predefinita e l'albero attivo delle rotte pubbliche del CMS viene caricato dal file
routes/public.phpdel pacchetto - i controller di ingresso pubblici di proprietà del pacchetto gestiscono ora home, home localizzata, ricerca, ricerca localizzata, ricerca JSON, visualizzazione della pagina, visualizzazione della pagina localizzata, invio dei messaggi di contatto, sincronizzazione del consenso privacy e gli endpoint interni di dominio
admin-api.* - le viste di ingresso pubbliche di proprietà del pacchetto coprono ora i template di ingresso di pagina e ricerca tramite
webblocks-cms::public.pages.showewebblocks-cms::public.search.show - la rotta riservata di stato pubblico del pacchetto resta a sua volta disattivata per impostazione predefinita dietro
webblocks-cms.public.load_status_route - l'autorità di runtime sugli asset pubblici e i confini di installazione/aggiornamento restano di proprietà della root al di fuori delle porzioni pubbliche di rotta, modello, supporto e vista spostate esplicitamente nel pacchetto
Perché queste porzioni restano parzialmente protette
- il runtime root resta autorevole per le installazioni al di fuori delle porzioni spostate intenzionalmente nel pacchetto
- i percorsi riservati del pacchetto evitano conflitti di nome di rotta e di percorso con il runtime amministrativo e pubblico esistente
- le rotte di stato protette separatamente consentono di testare il bootstrap del pacchetto, il caricamento delle rotte, il caricamento delle viste, il comportamento dei middleware e la segnalazione dello stato senza forzare quei percorsi di diagnostica riservati nel runtime normale
- l'autorità di runtime spostata è ancora intenzionalmente parziale, così i gruppi ad alto rischio come i modelli, la maggior parte delle classi di implementazione amministrativa, i livelli di supporto più ampi, le migrazioni, gli asset e il comportamento di System Update evitano una proprietà prematura da parte del pacchetto
Possibile fase successiva sulle rotte
- continuate a ridurre il caricamento di compatibilità delle rotte nella root solo dopo che le restanti implementazioni amministrative e pubbliche dietro i file di rotte del pacchetto sono state spostate o intenzionalmente lasciate alla root
- mantenete le rotte riservate di diagnostica e di stato del runtime esplicitamente protette anche mentre gli alberi normali delle rotte amministrative e pubbliche del CMS sono autorevoli dal pacchetto
- preservate nomi di rotta, percorsi, middleware e comportamento dei redirect mentre l'autorità delle rotte del pacchetto resta in anticipo rispetto a un'estrazione più profonda del runtime
- considerate la futura pulizia delle rotte come una fase di riduzione della compatibilità, non come la prova che il CMS sia già pronto come pacchetto per i consumatori
Possibile fase successiva sulle viste
- spostate viste reali di proprietà del pacchetto solo in fasi successive mirate, raggruppate per ambito di runtime: per esempio prima la diagnostica di proprietà del pacchetto, poi una proprietà delle viste amministrative o pubbliche attentamente verificata
- mantenete allineate la proprietà delle rotte e quella delle viste, così che una vista spostata in futuro venga introdotta solo quando il percorso di runtime proprietario è intenzionalmente gestito dal pacchetto
- preservate regole chiare di override in installazione e di autorità della root finché ogni fase di proprietà di rotte o viste non è progettata e verificata esplicitamente
Valori predefiniti di config del pacchetto rispetto agli override dell'installazione root
- La cartella
config/del pacchetto dovrebbe continuare a definire i valori predefiniti di proprietà del CMS. - Il
config/della root resta il livello di override di proprietà dell'installazione durante la transizione. - Un file di configurazione del pacchetto non dovrebbe diventare autorevole per il comportamento a runtime finché la logica degli override e il cablaggio del bootstrap non sono espliciti e stabili.
Strategia di caricamento e pubblicazione delle migrazioni del pacchetto
- Le migrazioni del pacchetto dovrebbero restare non autorevoli finché non esistono migrazioni reali di proprietà del pacchetto e la loro proprietà non viene spostata intenzionalmente.
- Quando inizia la proprietà delle migrazioni, preferite il caricamento dal pacchetto per i file di migrazione di proprietà del CMS e indicazioni di pubblicazione esplicite solo dove la personalizzazione locale dell'installazione è davvero necessaria.
- Non mescolate il lavoro sui confini delle migrazioni con refactoring di runtime non correlati.
- La cartella
database/migrations/della root resta il livello di compatibilità e di autorità per le installazioni mantenute da sorgente. Il percorso di aggiornamento mantenuto da sorgente richiede il segnale di autoload di Composer nella root del repository di manutenzione perWebBlocks\\Cms\\ => packages/webblocks-cms/src/; non basta che un'installazione consumer abbia una cartellapackages/webblocks-cms. Gli aggiornamenti delle installazioni consumer del pacchetto devono usare migrazioni di aggiornamento esplicite di proprietà del pacchetto e non devono eseguire implicitamente le migrazioni dell'applicazione Laravel ospite. - Le installazioni nuove consumer del pacchetto usano lo schema
database/migrations/freshdi proprietà del pacchetto tramitewebblocks:install. L'installer verifica preventivamente le tabelle CMS parziali prima dell'esecuzione di quello schema, si ferma con la diagnostica per impostazione predefinita e rinomina solo le tabelle parziali vuote quando l'operatore fornisce--repair-partial. PageLayoutSeedereBlockTypeSeederrestano per ora di proprietà della root perché attraversano ancora il catalogo dei page layouts, la sincronizzazione dei block types e confini più ampi del runtime di Pages o Blocks. AncheDatabaseSeederresta di proprietà della root come entrypoint attivo dell'installazione e come scrittore della versione installata.
Strategia di proprietà delle rotte del pacchetto
- La proprietà delle rotte da parte del pacchetto è ora attiva per gli alberi di runtime amministrativo e pubblico del CMS tramite i file
routes/admin.phperoutes/public.phpdel pacchetto. - Il file
routes/web.phpdella root è ora ridotto a installazione, autenticazione, profilo e caricamento di compatibilità di quei file di rotte del CMS di proprietà del pacchetto. - Gli spostamenti delle rotte devono continuare a preservare middleware, binding, nomi, percorsi, flussi modali, redirect e aspettative di installazione a valle.
- Le rotte di diagnostica, di stato del runtime amministrativo e di stato del runtime pubblico restano percorsi riservati protetti separatamente e non fanno parte della normale superficie di rotte del CMS sempre attiva.
- L'autorità sulle rotte non implica ancora la piena proprietà del runtime da parte del pacchetto, perché molti handler dietro quelle rotte dipendono ancora da modelli, codice di supporto, viste e asset della root.
Strategia di proprietà di viste e risorse del pacchetto
- La cartella
resources/viewsdel pacchetto possiede ora la vista di diagnostica, le viste protette di stato del runtime amministrativo e pubblico, le viste amministrative del catalogo delle icone, lo shell del layout pubblico, gli shell pubblici di pagina e ricerca, il modale pubblico di ricerca e le viste di ingresso degli slot di proprietà del pacchetto. - La cartella
resources/viewsdella root mantiene ora wrapper di compatibilità per le viste spostate di layout, pagina, slot e ingresso di ricerca pubblici, pur restando autorevole per la maggior parte delle schermate amministrative e per il più ampio albero di compatibilità del renderer pubblico dei blocchi, non ancora estratto del tutto. - Gli spostamenti delle viste dovrebbero restare allineati al percorso di runtime proprietario, così che l'autorità delle rotte del pacchetto non si spinga troppo avanti rispetto al reale livello di viste e controller proprietario.
- Le viste della root restano la via di compatibilità per la maggior parte del rendering attivo del CMS al di fuori delle superfici
webblocks-cms::spostate intenzionalmente.
Strategia di pubblicazione o sincronizzazione degli asset pubblici del pacchetto
- La cartella
public/del pacchetto dovrebbe col tempo possedere gli asset pubblicabili di proprietà del CMS. - Il lavoro di transizione dovrebbe distinguere gli asset del pacchetto di proprietà del CMS dagli override
public/site/...di proprietà dell'installazione. - La pubblicazione o sincronizzazione degli asset dovrebbe avvenire solo quando esistono asset reali del pacchetto e il flusso di aggiornamento definisce chiaramente quando la pubblicazione è necessaria.
- L'attuale intento di pubblicazione resta esplicito e contrassegnato con tag di pacchetto.
public/cms/package-boundary.jsonè il primo asset pubblicabile di proprietà del pacchetto e può essere pubblicato tramitewebblocks-cms-assets. - La cartella
public/cms/del pacchetto contiene ora anche il CSS e il JS del layout pubblico usati dal layout pubblico spostato di proprietà del pacchetto, ma gli URL degli assetpublic/cms/...attuali della root restano autorevoli nel runtime attivo per compatibilità, mentre gli assetpublic/site/...di proprietà dell'installazione restano autorevoli per gli override per singolo sito. - La cartella
public/cms/del pacchetto non deve contenereindex.php; l'ingresso amministrativo del CMS è/webadmin, non un ponte di front controller dalla cartella degli asset statici. - Il pinning della CDN di WebBlocks UI e la sorgente di sincronizzazione del manifest predefinito delle icone restano invariati in questa fase.
Strategia degli stub del pacchetto
- La cartella
stubs/del pacchetto dovrebbe essere riservata a template riutilizzabili di file generati che appartengono al comportamento del prodotto CMS. - Lo scaffolding specifico di un'installazione o di un progetto non dovrebbe confluire per impostazione predefinita negli stub del pacchetto CMS.
- Gli stub orientati all'avvio dei progetti risiedono ora in
stubs/starter/nel pacchetto, ma il comportamento attuale dell'installer e lo scaffolding del progetto root restano autorevoli finché un pacchetto starter dedicato non li adotta intenzionalmente.
Intento dei tag di pubblicazione del pacchetto
webblocks-cms-configè riservato alla pubblicazione, nella root dell'installazione, dei file di configurazione predefiniti del CMS di proprietà del pacchetto, quando uno sviluppatore ha intenzionalmente bisogno di quel flusso di lavoro.webblocks-cms-assetspubblica gli asset pubblici del CMS di proprietà del pacchetto nel percorso di compatibilità del runtime attivo,public/cms.webblocks-cms-stubspubblica gli stub iniziali di proprietà del pacchetto.- Questi tag non modificano da soli il comportamento a runtime e restano inerti finché
vendor:publishnon viene eseguito esplicitamente.
Flusso di aggiornamento gestito da Composer e comandi post-aggiornamento
- L'obiettivo a lungo termine resta l'aggiornamento del pacchetto gestito da Composer seguito da passaggi di runtime controllati.
- I passaggi previsti dopo l'aggiornamento potranno in seguito includere migrazioni, sincronizzazione dei tipi di blocco, pulizia della cache o pubblicazione o sincronizzazione degli asset, ma solo quando quelle risorse di proprietà del pacchetto saranno reali e collegate intenzionalmente.
- L'artefatto di rilascio canonico è ora la root del pacchetto stessa, non la root del repository di manutenzione. Gli ZIP di aggiornamento sono validi quando la root dell'archivio, oppure una singola directory contenitore di primo livello, contiene il
composer.jsondel pacchetto e la strutturasrc/,config/,resources/,database/,routes/epublic/attesa dafklavyenet/webblocks-cms. - La vecchia forma di archivio dell'updater gestita dalla root è intenzionalmente dismessa per gli aggiornamenti moderni nativi di pacchetto. Resta valida solo come artefatto ponte esplicito per installazioni precedenti al modello nativo di pacchetto come
1.31.53, il cui updater non è ancora in grado di validare ZIP con root di pacchetto. - I metadati di rilascio con root di pacchetto devono richiedere un updater in grado di fare da ponte (
minimum_client_versionpari a1.32.18o successivo). Le installazioni più vecchie dovrebbero ricevere prima il ponte compatibile e usare poi l'artefatto moderno con root di pacchetto, dopo che il ponte ha installato la validazione e il codice di applicazione nativi di pacchetto. - Durante l'attuale transizione, l'applicazione Laravel di root resta di proprietà dell'installazione e continua a eseguire modalità di manutenzione, migrazioni, seeder, comandi di sincronizzazione, pulizie della cache e persistenza della versione installata dalla root di installazione.
- Gli aggiornamenti in-app applicano ora l'artefatto di pacchetto validato in
packages/webblocks-cms/e, quando l'autoload di Composer mostra che il runtime consumatore attivo carica ancoraWebBlocks\Cms\davendor/fklavyenet/webblocks-cms/..., anche nella corrispondente root di runtime sicura del pacchetto vendor. Non sovrascrivono lo shell di root di proprietà dell'installazione, le sovrascritture di configurazione di root, le migrazioni di root,project/,storage/,.envopublic/site/. - Gli archivi ponte gestiti dalla root non sono un allentamento della validazione moderna. Un archivio ponte deve mantenere la vecchia forma con
artisanpiùcomposer.jsondi root unicamente per compatibilità con i client legacy e deve installare codice di aggiornamento in grado di imporre poi la forma rigorosa con root di pacchetto difklavyenet/webblocks-cms. - Il checkpoint di completamento dei confini
v1.31.65mantiene questo solo come nota di obiettivo. L'attuale comportamento di Composer nella root e il flusso di aggiornamento a runtime restano autorevoli finché non esisterà la prima vera porzione di runtime di proprietà del pacchetto.
Flusso di installazione di destinazione una volta pronta la separazione pacchetto-starter:
composer require fklavyenet/webblocks-cms- la root Laravel a livello di installazione resta responsabile di
.env, delcomposer.jsondi root, distorage/, delle sovrascritture di configurazione di proprietà dell'installazione e di eventuali personalizzazioni specifiche dell'installazione inproject/ancora presenti durante la transizione - il package discovery dovrebbe caricare
WebBlocks\Cms\WebBlocksCmsServiceProvider - la diagnostica del pacchetto, come
webblocks:package-status, dovrebbe confermare la prontezza del pacchetto senza modificare lo stato
Flusso di aggiornamento di destinazione una volta che gli aggiornamenti del pacchetto gestiti da Composer diventeranno autorevoli:
composer update fklavyenet/webblocks-cms- eseguire le migrazioni
- svuotare le cache dove necessario
- pubblicare o sincronizzare gli asset del pacchetto solo quando lo richiedono asset reali del pacchetto
- eseguire la diagnostica del pacchetto, come
webblocks:package-status - sincronizzare lo stato della versione installata solo quando l'aggiornamento corrisponde a un reale confine di rilascio
- eseguire separatamente la riparazione esplicita del catalogo quando le righe del catalogo distribuito necessitano manutenzione
Regola di compatibilità attuale:
- oggi quelle note sui flussi di installazione e aggiornamento sono solo documentazione dello stato di destinazione
- l'attuale comportamento di Composer nella root, il comportamento dell'installer e il comportamento di System Update in-app restano autorevoli finché una successiva fase dedicata al flusso di aggiornamento non li cambierà intenzionalmente
Direzione futura della separazione del progetto starter
- La direzione a lungo termine resta un progetto starter separato che dipenda da
fklavyenet/webblocks-cmscome pacchetto. - L'attuale pacchetto interno al repository esiste per stabilire confini e responsabilità prima di tentare quella separazione.
- La separazione dello starter dovrebbe avvenire solo dopo la riprogettazione dei confini di root rimanenti: runtime di installazione/autenticazione/profilo, modello
Userdi proprietà dell'app, autorità sulle migrazioni di root, autorità operativa di aggiornamento/installazione di root e il percorso attivo degli asset di runtimepublic/cmsdi root.
Passo successivo dopo i confini riservati
- Spostate un tipo di risorsa alla volta dal confine riservato alla proprietà attiva del pacchetto.
- Iniziate solo quando la regola esatta di caricamento a runtime, la gestione delle sovrascritture di installazione e il comportamento di pubblicazione/aggiornamento sono chiari per quel tipo di risorsa.
- Preferite piani di fase mirati, come viste del pacchetto, migrazioni del pacchetto o asset pubblici del pacchetto, invece di mescolare più tipi di risorse di runtime in un unico checkpoint.
- Tenete gli spostamenti di sorgente ad alto impatto sul runtime dietro audit dedicati delle dipendenze, invece di inserirli nel lavoro pilota sui confini delle risorse.
Fase 4: flusso di aggiornamento gestito dal pacchetto
Spostate il comportamento di aggiornamento verso aggiornamenti del pacchetto CMS gestiti da Composer, più passaggi successivi controllati come migrazioni, pulizia della cache e pubblicazione o sincronizzazione degli asset quando serve. La riparazione del catalogo resta un flusso di manutenzione esplicito dell'operatore invece di un passaggio di aggiornamento predefinito.
L'attuale checkpoint di prontezza include ora:
- autoload Composer del pacchetto per
WebBlocks\Cms\Database\Seeders\ - il collegamento di sviluppo mantenuto tramite repository di percorso nella root verso
packages/webblocks-cms - documentazione esplicita del fatto che l'attuale comportamento di System Update nella root resta autorevole finché una successiva fase dedicata al flusso di aggiornamento non lo cambierà intenzionalmente
Fase 5: separazione del progetto starter
Introducete la direzione del progetto starter separato, come fklavyenet/webblocks-cms-starter, in modo che le nuove installazioni partano da una root Laravel di proprietà dell'utente che dipende dal pacchetto CMS, invece di clonare il repository del core CMS nella root del progetto.
L'attuale checkpoint aggiunge soltanto il lavoro preparatorio sui confini per quella futura separazione:
- più seeder di proprietà del CMS vivono ora nel pacchetto invece che nel namespace dell'app di root
- più helper di supporto a runtime a basso rischio vivono ora in
src/Support/del pacchetto - i wrapper di compatibilità in
app/di root non vengono più mantenuti per impostazione predefinita; i wrapper PHP omologhi del pacchetto sono stati rimossi, mentre i percorsi di compatibilità di Blade, seeder e asset di runtime di root restano dove ancora servono - i metadati composer del pacchetto, la discovery del provider, il collegamento di sviluppo tramite repository di percorso e il flusso di destinazione documentato di
composer requireocomposer updateformano ora la linea di base di prontezza della fondazione starter
Indicazioni di migrazione per le installazioni esistenti
Le installazioni esistenti avranno bisogno di un percorso di migrazione conservativo:
- mantenere funzionanti le installazioni attuali finché la transizione al pacchetto è incompleta
- evitare grandi spostamenti in un solo passaggio che mescolino refactoring di runtime e modifiche di packaging
- preservare i file di root specifici dell'installazione come stato di progetto di proprietà dell'utente
- smettere di affidarsi alla sostituzione dei file del core CMS su tutta la root come meccanismo di aggiornamento
- introdurre indicazioni chiare per rimuovere i file obsoleti del core CMS gestiti dalla root una volta che esistono i loro sostituti di proprietà del pacchetto
La transizione dovrebbe privilegiare movimenti incrementali a basso rischio rispetto a una riscrittura unica.
Stato attuale
Il consolidamento della transizione al pacchetto è completo per tutto il sorgente di proprietà del CMS spostabile in sicurezza in questo repository.
- L'autorità del pacchetto copre ora i domini di sorgente runtime di rotte, viste, modelli, seeder, partial condivisi, layout di amministrazione e supporto del CMS spostabili in sicurezza.
- Le classi
App\...omologhe del pacchetto sono state rimosse dall'albero app del repository di manutenzione; i file Blade di root, i seeder di root e le copie di runtime inpublic/cms/...di root restano intenzionalmente al loro posto come wrapper o percorsi di compatibilità. - Gli URL degli asset di runtime attivi usano ancora i percorsi di compatibilità
public/cms/...di root anche dove esistono file sorgente omologhi di proprietà del pacchetto sottopackages/webblocks-cms/public/cms/.... - I confini finali rimanenti sono il runtime di installazione/autenticazione/profilo, il modello
Userdi proprietà dell'app, l'autorità sulle migrazioni di root, l'autorità operativa di aggiornamento/installazione di root e il design della futura separazione starter. - A causa di questi blocchi il pacchetto non è ancora pronto per la separazione starter, anche se il lavoro sicuro di consolidamento del sorgente di proprietà del CMS è completo.
Questa modifica del repository è solo il primo passo di transizione a basso rischio:
- aggiunge documentazione di architettura
- crea lo scheletro del pacchetto nel repository in
packages/webblocks-cms/ - aggiunge un
composer.jsonminimo per il pacchetto - aggiunge un
WebBlocks\Cms\WebBlocksCmsServiceProvider - collega il progetto di root per richiedere il pacchetto localmente tramite percorso
Il provider definisce ora il contratto di bootstrap del pacchetto per le future risorse del pacchetto, ma quelle risorse non sono ancora autorevoli perché gli attuali file di runtime del CMS vivono ancora nell'applicazione di root.
Il pilota v1.31.62 rende più concreti quei confini di risorse del pacchetto aggiungendo file marcatori di confine riservati espliciti sotto routes/, resources/views/, database/migrations/, public/ e stubs/ del pacchetto. Queste directory esistono ora come destinazioni documentate di proprietà del pacchetto per le fasi successive, ma il loro contenuto resta un segnaposto non autorevole in questo checkpoint.
Il pilota v1.31.63 fa avanzare solo il confine del namespace delle viste del pacchetto aggiungendo una vera vista Blade diagnostica interna sotto resources/views/diagnostics/package-status.blade.php del pacchetto e una sonda di rendering opzionale in sola lettura webblocks:package-status --view-check. Questo dimostra il caricamento delle viste basato sul namespace del pacchetto con una vera vista di proprietà del pacchetto, lasciando autorevole la risoluzione delle viste di amministrazione e pubbliche di root.
Il pilota v1.31.64 fa avanzare solo il confine delle rotte del pacchetto aggiungendo un vero file di rotte diagnostiche del pacchetto sotto routes/diagnostics.php, mantenendo il caricamento delle rotte esplicitamente disattivato nel runtime normale. Questo dimostra i confini di proprietà dei file di rotta del pacchetto senza spostare alcuna rotta attiva di amministrazione o pubblica di root.
Il checkpoint v1.31.65 completa i restanti pilota di confine inerti mantenendo le migrazioni del pacchetto esplicitamente disattivate da guardia, confermando che la pubblicazione di asset pubblici e stub del pacchetto resta inerte finché non esistono file reali di proprietà del pacchetto, e documentando gli aggiornamenti del pacchetto gestiti da Composer come confine di destinazione senza modificare l'attuale flusso di aggiornamento di root.
La release v1.32.0 avvia quel movimento pianificato con le fasi 1-2 di migrazione del runtime protette da guardie:
- la porzione di runtime diagnostica del pacchetto è reale e di proprietà del pacchetto end to end, tramite un controller del pacchetto più la vista diagnostica già esistente del pacchetto, ma resta disattivata da guardia per impostazione predefinita
- una porzione mirata di runtime di amministrazione è ora di proprietà del pacchetto end to end tramite
routes/admin.php,src/Http/Controllers/Admin/PackageAdminStatusController.phperesources/views/admin/runtime-status.blade.phpdel pacchetto, ma resta disattivata da guardia per impostazione predefinita su un percorso riservato - una porzione mirata di runtime pubblico è ora di proprietà del pacchetto end to end tramite
routes/public.php,src/Http/Controllers/Public/PackagePublicStatusController.phperesources/views/public/runtime-status.blade.phpdel pacchetto, ma resta disattivata da guardia per impostazione predefinita su un percorso riservato webblocks:package-statusriporta ora la porzione di runtime diagnostica, la porzione admin del pacchetto, la porzione pubblica del pacchetto e le guardie di rotta esplicite, ancora in sola lettura- le rotte e le viste di root restano autorevoli per il runtime CMS esistente al di fuori di questi percorsi riservati al pacchetto e protetti da guardie
config/webblocks-cms.phpdel pacchetto possiede ora valori di configurazione di transizione espliciti: diagnostica, rotte pubbliche di stato, rotte admin di stato e caricamento delle migrazioni del pacchetto restano disattivati per impostazione predefinita, mentre il caricamento delle rotte admin del pacchetto è abilitato per dare autorità attiva alle rotte di amministrazione di proprietà del pacchetto
Le seguenti note storiche dei checkpoint descrivono come è stata introdotta l'autorità del pacchetto. Dove menzionano wrapper App\... di root, l'attuale ampia pulizia dell'app di root sostituisce quello stato: i wrapper PHP omologhi del pacchetto ora sono intenzionalmente assenti, salvo quanto elencato nello stato attuale di pulizia dell'app di root riportato sopra.
L'attuale checkpoint di autorità del runtime del passo 1 estende ulteriormente quel confine:
- le rotte di amministrazione attive del CMS si caricano ora da
routes/admin.phpdel pacchetto, mentreroutes/web.phpdi root è ridotto al caricamento di installazione, autenticazione, profilo e compatibilità - le rotte pubbliche attive del CMS si caricano ora da
routes/public.phpdel pacchetto, incluse home, home localizzata, ricerca, ricerca localizzata, ricerca JSON, visualizzazione pagina, visualizzazione pagina localizzata, invii dei contatti, sincronizzazione del consenso privacy eadmin-api.* - controller pubblici di proprietà del pacchetto sostengono ora quella porzione di ingresso pubblico sotto
packages/webblocks-cms/src/Http/Controllers/Public/ - un
ContactMessageRequestdi proprietà del pacchetto e viste di ingresso pubblico di proprietà del pacchetto sostengono ora gli entrypoint delle rotte pubbliche spostate App\Http\Controllers\PageController,PublicSearchController,ContactMessageController,PublicPrivacyConsentControllereApp\Http\Requests\ContactMessageRequestdi root sono stati poi rimossi in quanto wrapper omologhi ridondanti del pacchetto- i modelli e le classi di supporto di root restano solo dove servono domini di proprietà dell'host o di esplicita transizione; Users, installazione/profilo/autenticazione, i percorsi di runtime degli asset pubblici/admin di root, le migrazioni e il comportamento di System Update restano confini, quindi il pacchetto non è ancora pronto a fungere da runtime starter pienamente indipendente senza un'estrazione più profonda
L'attuale checkpoint di rendering pubblico del passo 2 estende ulteriormente l'autorità del pacchetto dietro quelle rotte pubbliche già di proprietà del pacchetto:
- il file del pacchetto
resources/views/layouts/public.blade.phppossiede ora il guscio di layout pubblico attivo sotto il namespacewebblocks-cms:: - i file del pacchetto
resources/views/pages/show.blade.php,resources/views/search/show.blade.php,resources/views/search/partials/modal.blade.phpepages/partials/slot*.blade.phppossiedono ora il guscio di pagina pubblico attivo, il guscio di ricerca pubblico, la finestra modale di ricerca pubblica e il livello di rendering delle voci di slot - i file di root
resources/views/layouts/public.blade.php,resources/views/pages/show.blade.php,resources/views/search/show.blade.php,resources/views/search/partials/modal.blade.php,resources/views/pages/partials/slot.blade.phperesources/views/pages/partials/block.blade.phprestano ora solo come wrapper di compatibilità che puntano alle viste con namespace di proprietà del pacchetto - il supporto al rendering pubblico di proprietà del pacchetto include ora
PageRouteResolver,PublicPagePresenter,PublicSharedSlotResolver,SlotWrapperResolver,SiteAssetResolver,PublicSearchQuery,PublicOverlayRegistry,PublicBodyEndRegistry,TrustedHtmlOverlayExtractor,SiteResolver,ResolvedSiteeVisitorEventLogger - le classi di root
App\Support\...per quegli aspetti del rendering pubblico sono state rimosse in seguito, una volta che gli interni del pacchetto e le rotte non le richiedevano più - la directory del pacchetto
resources/views/pages/partials/blocks/*possiede ora l'intero albero di partial del renderer pubblico dei blocchi incluso, come un unico lotto coerente del pacchetto - i file di root
resources/views/pages/partials/blocks/restano ora come sottili wrapper di compatibilità che delegano alle vistewebblocks-cms::pages.partials.blocks.corrispondenti Block::publicRenderView()risolve ora i tipi di blocco core inclusi dando priorità ai partial di blocco con namespace di proprietà del pacchetto, mentre i renderer di blocco di root specifici dell'installazione o personalizzati restano disponibili tramite il percorso di ripiego di root esistente quando non esiste un partial corrispondente nel pacchetto- la base del modello pubblico vive ora sotto
src/Models/del pacchetto; i wrapper di rootApp\Models\...corrispondenti sono stati rimossi in seguito, dopo che i test del pacchetto e dei consumatori nuovi hanno dimostrato che non erano necessari Page,PageTranslation,PageSloteBlockvivono ora anch'essi sottosrc/Models/del pacchetto, senza wrapper di root corrispondentiUserresta intenzionalmente di proprietà dell'applicazione e della root e non fa parte dell'obiettivo di migrazione dei modelli nel pacchetto- la directory
public/cms/del pacchetto include ora i file CSS e JS di runtime pubblico attivi necessari al livello di layout pubblico e di rendering dei blocchi spostato nel pacchetto, evendor:publish --tag=webblocks-cms-assetspubblica ora quegli asset reali del pacchetto nel percorso di compatibilità di rootpublic/cms - il runtime attivo continua a servire
public/cms/...dall'installazione di root per compatibilità, mentre l'installazione e System Update aggiornano in quel percorso gli asset CMS di proprietà del pacchetto - le migrazioni di root restano autorevoli per i checkout mantenuti da sorgente con il segnale esplicito di autoload Composer nella root, mentre i System Update nativi del pacchetto saltano le migrazioni dell'applicazione Laravel ospite ed eseguono solo le migrazioni di aggiornamento dedicate del pacchetto quando presenti
- System Update, il flusso di installazione, backup o ripristino e il più ampio runtime del livello di progetto restano invariati in questo lotto
- la validazione con consumatori o starter package non è ancora realistica dopo questo checkpoint, perché il runtime dipende ancora dalle migrazioni di root, dai percorsi degli asset di compatibilità di root, dai flussi di amministrazione e installazione/aggiornamento di proprietà della root e dal confine intenzionale del modello
Userdi root di proprietà dell'applicazione
L'attuale checkpoint del runtime di amministrazione di Site e Locale sposta un'altra fetta coerente dell'amministrazione dietro l'albero di rotte di amministrazione di proprietà del pacchetto:
- i controller di proprietà del pacchetto gestiscono ora l'amministrazione di Site, la gestione di Site Domain, la gestione di Site Variable e l'amministrazione di Locale sotto
packages/webblocks-cms/src/Http/Controllers/Admin/ - le Form Request di proprietà del pacchetto, i modelli
SiteLocaleeSiteVariablee i servizi di supporto direttamente collegati a Site o Locale vivono ora sottosrc/del pacchetto, senza wrapper di rootApp\...corrispondenti - le directory del pacchetto
resources/views/admin/sites/,resources/views/admin/sites/domains/,resources/views/admin/domains/eresources/views/admin/locales/possiedono ora gli alberi Blade attivi di amministrazione di Site, Domain e Locale attraverso il namespacewebblocks-cms:: - i file Blade di root di Site, Domain e Locale restano ora come sottili wrapper di compatibilità che renderizzano le viste corrispondenti di proprietà del pacchetto
- questo lotto intenzionalmente non sposta migrazioni, flussi di installazione/aggiornamento, backup/ripristino, proprietà di autenticazione/profilo/User, proprietà della configurazione di root o l'autorità sugli asset public/cms
La configurazione predefinita di proprietà del pacchetto è ormai avviata per webblocks-updates, mentre il file di configurazione di root resta autorevole come override dell'installazione durante la transizione.
La configurazione predefinita di proprietà del pacchetto è ormai avviata anche per contact, mentre il file di configurazione di root resta autorevole come override dell'installazione durante la transizione.
La configurazione predefinita di proprietà del pacchetto è ormai avviata anche per demo_media, mentre il file di configurazione di root resta autorevole come override dell'installazione durante la transizione.
La configurazione predefinita di proprietà del pacchetto è ormai avviata anche per cms, mentre il file di configurazione di root resta autorevole come override dell'installazione durante la transizione.
Il bootstrap della console di proprietà del pacchetto è ora dimostrato anche dal comando diagnostico di sola lettura webblocks:package-status.
Il namespace delle viste del pacchetto webblocks-cms è ora registrato in sicurezza anche come pilota del confine di pacchetto, e v1.31.63 dimostra quel namespace con una vista diagnostica reale di proprietà del pacchetto. La risoluzione attiva delle viste di root resta autorevole perché nessuna vista di amministrazione o pubblica attiva del runtime CMS è stata spostata nel pacchetto.
Il confine delle rotte del pacchetto è ora dimostrato anche con un file di rotte diagnostiche reale di proprietà del pacchetto, ma la risoluzione attiva delle rotte di amministrazione e pubbliche di root resta autorevole, perché le rotte diagnostiche del pacchetto restano disabilitate dai guard nel runtime normale e nessun file di rotte di root attivo è stato spostato nel pacchetto.
I confini di migrazione, asset pubblici e stub del pacchetto sono ora anche esplicitamente completati come piloti riservati e inerti, e il confine del flusso di aggiornamento gestito da Composer è documentato solo come direzione di destinazione. Nessuna migrazione di root attiva, nessun asset pubblico di root, nessun comportamento degli stub di root e nessun comportamento del flusso di aggiornamento di root è ancora passato sotto l'autorità del pacchetto.
Il primo spostamento di sorgente PHP di proprietà del pacchetto è ora completo per SearchTextNormalizer, spostato da app/Support/Search/ a src/Support/Search/ del pacchetto mantenendo il comportamento invariato.
Il confine del supporto Search resta intenzionalmente stretto in questa fase: SearchTextNormalizer e il piccolo value object di risultato PublicSearchRebuildResult sono ora di proprietà del pacchetto, mentre l'indicizzazione della ricerca e l'orchestrazione delle query restano di proprietà della root finché le loro dipendenze da database e runtime non saranno migrate deliberatamente.
È ora documentato anche il primo audit di Support non legato a Search: MediaKindResolver, DatabaseExecutionStrategyResolver, SiteHandle e SiteDomainNormalizer sono stati esaminati e nessuna classe aggiuntiva è stata spostata, perché ciascuna attraversa ancora almeno un confine di rischio attuale di questa fase iniziale.
Il primo spostamento di sorgente del supporto Contact è ora completo anche per ContactMessageNotificationResult, spostato da app/Support/Contact/ a src/Support/Contact/ del pacchetto mantenendo il comportamento invariato, mentre il servizio di notifica e il flusso di runtime dei contatti restano di proprietà della root.
Il primo spostamento di sorgente del supporto BlockTypes è ora completo anche per BlockTypeContract, spostato da app/Support/BlockTypes/ a src/Support/BlockTypes/ del pacchetto mantenendo il comportamento invariato, mentre il registro, il percorso della finestra modale dei contratti nell'amministrazione e il comando di audit restano di proprietà della root.
Anche LayoutMarkup è stato esaminato come possibile spostamento circoscritto di un helper di Pages e resta per ora di proprietà della root, perché i suoi riferimenti attuali attraversano ancora la validazione delle richieste di page layout, il rendering dei form di amministrazione e il comportamento pubblico dei wrapper di slot.
Il primo spostamento di sorgente del supporto Formatting è ora completo anche per InlineRichTextRenderer, spostato da app/Support/Formatting/ a src/Support/Formatting/ del pacchetto mantenendo il comportamento invariato, mentre SafeRichTextRenderer e il suo contratto di sanitizzazione restano di proprietà della root.
Il successivo checkpoint di supporto al runtime a basso rischio è ora completo anche per quattro helper circoscritti che restano vicini allo stato delle query di amministrazione e alla paginazione:
AdminPaginationvive ora insrc/Support/Admin/del pacchettoBlockTypeIndexStatevive ora insrc/Support/BlockTypes/del pacchettoMediaIndexStatevive ora insrc/Support/Media/del pacchettoPageIndexStatevive ora insrc/Support/Pages/del pacchetto- i wrapper di root
App\Support\...per questi helper sono stati rimossi in seguito; gli import del pacchetto sono autorevoli
Il primo spostamento del confine dei seeder di proprietà del pacchetto è ora completo anche per i cataloghi a basso rischio:
- ora di proprietà del pacchetto:
IconCatalogSeeder,PageTypeSeeder,LayoutTypeSeeder,SlotTypeSeeder - ora di proprietà del pacchetto anche:
CoreCatalogSeeder, come spostamento del confine dell'aggregatore di cataloghi - le classi di root
Database\Seeders\...restano come wrapper di compatibilità CoreCatalogSeedermantiene comunque stabili gli entrypoint di root delegando tramite il wrapper di root, continuando a chiamarePageLayoutSeedereBlockTypeSeederdi proprietà della rootPageLayoutSeeder,BlockTypeSeedere il seeding attivo di System Update restano di proprietà della root fino a una fase dedicata successiva
Il successivo lotto isolato di runtime di proprietà del pacchetto è ora completo anche per la gestione del catalogo delle icone:
- ora di proprietà del pacchetto:
SyncWebBlocksUiIconsCommand,IconCatalogController,IconCatalogItemUpdateRequest,IconCatalogeWebBlocksIconManifestSyncer - le classi di root
App\Http\Controllers\Admin\IconCatalogController,App\Http\Requests\Admin\IconCatalogItemUpdateRequest,App\Support\Icons\...eApp\Console\Commands\SyncWebBlocksUiIconsCommandsono state rimosse in seguito come wrapper ridondanti delle controparti del pacchetto - le rotte attive di amministrazione del catalogo delle icone puntano ora direttamente al controller del pacchetto, e
icons:sync-webblocks-uiè ora registrato dal service provider del pacchetto con la classe di comando del pacchetto - le definizioni attive delle rotte di amministrazione del catalogo delle icone vivono ora in
routes/admin.phpdel pacchetto invece che inroutes/web.phpdi root - i wrapper PHP di root del catalogo delle icone non sono più disponibili; l'autorità attiva su rotte e console risiede nel pacchetto
- ora di proprietà del pacchetto anche: le viste Blade attive di indice e di finestra modale di modifica del catalogo delle icone nell'amministrazione, sotto
packages/webblocks-cms/resources/views/admin/system/icons/ - i file Blade di root del catalogo delle icone restano come wrapper di compatibilità che includono le viste con namespace del pacchetto, ma il controller del pacchetto renderizza direttamente
webblocks-cms::admin.system.icons.index - questo lotto resta unicamente nell'ambito dell'amministrazione e della sincronizzazione del catalogo delle icone e intenzionalmente non sposta la proprietà del runtime più ampio di Pages, Blocks, indicizzazione Search, Sites, Updates, Install, Backup o Restore, Export o Import, né del rendering pubblico
webblocks:package-statussegnala ora i file di runtime delle icone di proprietà del pacchetto e l'assenza dei corrispondenti wrapper PHP di root, come parte della diagnostica di transizione di sola lettura
Il successivo lotto più ampio di estrazione del runtime di amministrazione è ora completo anche per le principali superfici di gestione editoriale e dei cataloghi:
routes/admin.phpdel pacchetto è ora autorevole non solo per la gestione del catalogo delle icone, ma anche per gli handler attivi delle rotte di amministrazione di Pages, Blocks, Media, Shared Slots, Navigation, Block Types e Page Layouts- ora di proprietà del pacchetto: i controller di amministrazione autorevoli per quelle fette, sotto
packages/webblocks-cms/src/Http/Controllers/Admin/ - ora di proprietà del pacchetto: le form request di amministrazione autorevoli per quelle fette, sotto
packages/webblocks-cms/src/Http/Requests/Admin/ - ora di proprietà del pacchetto: i servizi di supporto per blocchi, media, navigazione, pagine, page layout e shared slot, sotto
packages/webblocks-cms/src/Support/ - ora di proprietà del pacchetto: gli alberi Blade di amministrazione attivi sotto
packages/webblocks-cms/resources/views/admin/blocks/,admin/media/,admin/navigation/,admin/block-types/,admin/pages/,admin/shared-slots/,admin/page-layouts/eadmin/page-layout-slots/ - i wrapper PHP di root
App\Http\Controllers\Admin\...,App\Http\Requests\Admin\...eApp\Support\...per quelle fette spostate sono stati rimossi in seguito come wrapper ridondanti delle controparti del pacchetto - i file di root
resources/views/admin/...per quegli alberi spostati restano ora come wrapper di compatibilità che includono le vistewebblocks-cms::admin.*corrispondenti - un'eccezione resta intenzionalmente concreta nella root:
resources/views/admin/blocks/types/partials/rich-text-editor.blade.phpconserva ancora il markup reale, perché la copertura di compatibilità legge quel file di root direttamente invece di risolverlo solo tramite il namespace del pacchetto - questo lotto intenzionalmente non sposta Users, backup, aggiornamenti, impostazioni di sistema, flusso di installazione, migrazioni, percorsi degli asset di runtime di root o il modello
Userdi proprietà dell'applicazione webblocks:package-status, insieme a una copertura di bootstrap mirata, segnala ora i più ampi file di runtime di amministrazione di proprietà del pacchetto e l'assenza dei corrispondenti wrapper PHP di root
Il lotto mirato del runtime operativo di amministrazione è ora anch'esso di proprietà del pacchetto:
- i controller di proprietà del pacchetto gestiscono ora l'interfaccia Dashboard, quella di revisione dei Contact Messages in amministrazione, quella dei Visitor Reports e quella di stato o ricostruzione di System Search, sotto
packages/webblocks-cms/src/Http/Controllers/Admin/ - le classi di supporto di proprietà del pacchetto includono ora il servizio di query per i report dei visitatori e l'helper leggero per lo stato dello schema della ricerca pubblica; l'architettura completa di indicizzazione della ricerca e il comportamento del comando
search:rebuildrestano invariati dietro i punti di ingresso di compatibilità nella radice - nel pacchetto,
resources/views/admin/dashboard.blade.php,admin/contact-messages/*,admin/reports/visitors/index.blade.phpeadmin/system/search.blade.phpsono ora i proprietari delle superfici Blade operative attive dell'amministrazione tramite lo spazio dei nomiwebblocks-cms:: - i file di controller, supporto e Blade nella radice per quelle superfici operative restano wrapper di compatibilità leggeri
- questo lotto non sposta intenzionalmente System Update, System Backup, il backup/ripristino, l'esportazione/importazione dei siti, la promozione dei siti, l'installer, la proprietà di auth/profilo/User, le migrazioni né la proprietà della configurazione nella radice, e nemmeno l'autorità sugli asset di
public/cmsnella radice
Il follow-up sicuro rimanente sulle rotte operative attive è ora anch'esso completo:
- i controller di proprietà del pacchetto gestiscono ora anche
Slot TypeseSystem Settingssottopackages/webblocks-cms/src/Http/Controllers/Admin/ - le Form Request di proprietà del pacchetto includono ora anche
SystemSettingsRequestsottopackages/webblocks-cms/src/Http/Requests/Admin/ - nel pacchetto,
resources/views/admin/slot-types/index.blade.phperesources/views/admin/system/settings.blade.phpsono ora i proprietari delle superfici Blade attive tramite lo spazio dei nomiwebblocks-cms:: - nella radice,
App\Http\Controllers\Admin\SlotTypeController,App\Http\Controllers\Admin\SystemSettingsController,App\Http\Requests\Admin\SystemSettingsRequeste i file Blade corrispondenti nella radice restano wrapper di compatibilità - questo follow-up continua intenzionalmente a non spostare l'implementazione di System Update, il backup o il ripristino, l'installer, la proprietà di auth/profilo/User, le migrazioni né la proprietà della configurazione nella radice, e nemmeno l'autorità sugli asset a runtime di
public/cmsnella radice
Lo stato dello shell di amministrazione e del confine degli asset è il seguente:
- le viste di amministrazione di proprietà del pacchetto estendono
webblocks-cms::layouts.admin, e il wrapper di compatibilità nella radiceresources/views/layouts/admin.blade.phpè stato rimosso, così gli errori di spazio dei nomi nei consumatori del pacchetto falliscono localmente - nel pacchetto,
public/cms/contiene anche i file sorgente CSS e JS di amministrazione corrispondenti al set di asset di amministrazione attivo nella radice, mentre i percorsipublic/cms/...nella radice restano il livello di compatibilità a runtime - le migrazioni, l'updater, il backup/ripristino, l'esportazione/importazione, la promozione, auth/User, l'installer, la configurazione nella radice e l'autorità sugli asset a runtime restano fuori dal confine immediato dello shell di amministrazione del pacchetto
I lotti selezionati di partial e componenti condivisi dell'amministrazione sono ora di proprietà del pacchetto:
- ora di proprietà del pacchetto:
webblocks-cms::admin.partials.page-header,flash,listing-filters,page-actions,paginationeaudit-actor - ora di proprietà del pacchetto:
webblocks-cms::components.admin.form-actions, utilizzato dalle viste del pacchetto tramite<x-webblocks-cms::admin.form-actions> - ora di proprietà del pacchetto:
webblocks-cms::layouts.admin, utilizzato dalle viste di amministrazione di proprietà del pacchetto tramite@extends('webblocks-cms::layouts.admin', ...) - nella radice,
resources/views/admin/partials/{page-header,flash,listing-filters,page-actions,pagination,audit-actor}.blade.phprestano wrapper di compatibilità - nella radice,
resources/views/layouts/admin.blade.phpnon esiste più; le viste di amministrazione dei plugin e del pacchetto non devono usare il percorso storicolayouts.admin - nella radice,
resources/views/components/admin/form-actions.blade.phpresta il wrapper di compatibilità per l'uso esistente di<x-admin.form-actions> - le viste di amministrazione di proprietà del pacchetto preferiscono ora lo spazio dei nomi del pacchetto per il layout di amministrazione e per quei partial e componenti condivisi selezionati
webblocks:package-statusriporta ora il confine selezionato di partial e componenti condivisi dell'amministrazione, oltre all'inventario delle viste di amministrazione a runtime, che ora include il layout di amministrazione di proprietà del pacchetto e il relativo wrapper nella radice- gli URL degli asset di amministrazione nella radice e l'autorità a runtime su
public/cms, gli asset di brand, i confini auth/profilo/installazione/app/guest, le migrazioni, l'updater, il backup/ripristino e il lavoro su rilascio e versione restano invariati
La revisione dei confini del pacchetto della v1.32.15 aggiunge un audit statico, come gate di rilascio, per i riferimenti di amministrazione a runtime di proprietà del pacchetto:
- l'audit analizza
packages/webblocks-cms/src/*/.php,packages/webblocks-cms/resources/views/*/.blade.phpepackages/webblocks-cms/routes/*/.php - fallisce in presenza di riferimenti di amministrazione presenti solo nella radice come
view('admin.'),View::make('admin.'),response()->view('admin.'),@include('admin.'),@includeIf('admin.'),@extends('layouts.admin'),<x-admin.,<x-auth-password-field,component('admin.')e i riferimenti direttiadmin.blocks.types.di amministrazione dei blocchi nella radice - le uniche eccezioni ammesse sono voci esatte di file e pattern nella allowlist, in cui il runtime del pacchetto controlla prima il nome
webblocks-cms::...e usa il nome nella radice solo come fallback di compatibilità esplicito per le sovrascritture esistenti specifiche dell'installazione
Il checkpoint iniziale a basso rischio sul codice sorgente di helper e value object è ora considerato riuscito e completo per questa fase. Anche l'ambiente di sviluppo locale si è aggiornato correttamente dopo v1.31.60, a conferma che l'attuale cablaggio del pacchetto funziona nell'ambiente di sviluppo mantenuto.
Ulteriori spostamenti opportunistici di codice PHP a basso rischio sono ora sospesi. I futuri spostamenti di codice con forte impatto a runtime richiedono un piano di fase dedicato e un audit delle dipendenze, invece di altre piccole migrazioni opportunistiche.
Non sposta ancora il codice runtime esistente del CMS, non modifica il comportamento di System Update, non crea un progetto starter e non cambia gli attuali confini di proprietà a runtime.
Piano del prossimo lotto di estrazione
Il passo 1 ha spostato nel pacchetto l'autorità sulle rotte attive del CMS, sia per l'amministrazione sia per il runtime pubblico, e ha spostato anche la porzione di ingresso delle rotte pubbliche per le richieste di pagina, ricerca, messaggio di contatto e consenso alla privacy. Il prossimo lotto dovrebbe ridurre la maggiore area di doppia proprietà rimasta dietro quell'autorità sulle rotte del pacchetto, invece di avviare un altro pilota ristretto.
Mappa attuale dei blocchi
Modelli che bloccano ancora un runtime indipendente del pacchetto:
- restano temporaneamente di proprietà della radice con una dipendenza dal pacchetto documentata: modelli di contenuto di amministrazione come
BlockType,Media,SharedSlot,PageAsset,PageLayout,PageRevision,NavigationItem,SiteExporteSiteImport - di proprietà del pacchetto con wrapper di compatibilità nella radice:
Locale,Site,SiteDomain,SiteLocale,SiteVariable,Page,PageTranslation,PageSlot,Block,ContactMessage,PublicSearchIndex,VisitorEventeSystemSetting - probabilmente pronti per il pacchetto a breve, come follow-up ristretto di una porzione già di proprietà del pacchetto:
IconCatalogItem - deve restare di proprietà dell'applicazione:
User
Confini delle viste che bloccano ancora un runtime indipendente del pacchetto:
- il layout pubblico del pacchetto, lo shell di pagina, lo shell di ricerca, il modale di ricerca, le viste di ingresso degli slot e l'albero distribuito dei partial di rendering pubblico dei blocchi sono ora autoritativi tramite lo spazio dei nomi
webblocks-cms:: - nella radice,
resources/views/pages/partials/blocks/*resta intenzionalmente presente come livello di wrapper di compatibilità, così che i renderer di blocchi specifici dell'installazione nella radice e i riferimenti diretti alle viste nella radice continuino a funzionare durante la transizione - il rendering di amministrazione del pacchetto è ora autoritativo per
admin/pages/,admin/blocks/,admin/shared-slots/,admin/media/,admin/navigation/,admin/block-types/,admin/page-layouts/,admin/page-layout-slots/,admin/sites/,admin/domains/eadmin/locales/*tramite lo spazio dei nomiwebblocks-cms::, mentre i file Blade corrispondenti nella radice restano wrapper di compatibilità - il rendering di amministrazione nella radice resta autoritativo per le schermate non ancora spostate, in particolare i wrapper di installazione/auth/profilo e i casi limite dell'utente di proprietà dell'applicazione, mentre il rendering del pacchetto è autoritativo per le schermate attive di trasferimento e promozione dei siti tramite
webblocks-cms::
Confini di supporto e di servizi che bloccano ancora un runtime indipendente del pacchetto:
- ora di proprietà del pacchetto per la porzione di rendering pubblico: risoluzione delle rotte, presentazione delle pagine, presentazione degli Shared Slot, risoluzione dei wrapper di slot, estrazione degli overlay HTML attendibili, registri degli overlay pubblici o di fine body, orchestrazione delle query di ricerca pubblica, risoluzione del sito pubblico, risoluzione degli asset del sito e registrazione degli eventi dei visitatori
- spostare solo dopo lo spostamento dei modelli: i restanti livelli Pages o PublicRendering, Blocks, indicizzazione di Search, Navigation, SharedSlots o Revisions che poggiano ancora direttamente su modelli nella radice o su flussi di amministrazione più ampi
- mantenere per ora di proprietà della radice: Media, i flussi di portabilità di Sites, la sanitizzazione di Formatting e gli helper di Admin o Audit
- deve restare di proprietà della radice dell'installazione: Install, System o Updates, il backup o ripristino e gli writer della versione installata e dell'ambiente
Blocchi su request, comandi, asset, migrazioni e flusso di aggiornamento:
- molte Form Request di amministrazione potranno essere spostate in seguito con wrapper nella radice, una volta spostati i lotti corrispondenti di pagina, blocco, Shared Slot, media, sito e navigazione
- molte Form Request editoriali dell'amministrazione sono già state spostate con wrapper nella radice, ma le request di sistema, portabilità dei siti, aggiornamento, backup, installazione e le altre orientate alle operazioni restano di proprietà della radice
- i comandi di aggiornamento, backup, importazione, esportazione, promozione e installazione usati dal pacchetto devono restare esplicitamente delimitati, perché dipendono ancora dall'ambiente, dal filesystem, dagli archivi, da Composer, dalle migrazioni e dallo stato dell'installazione
- nella radice,
public/cms/*continua a contenere gli asset che costituiscono i percorsi runtime autoritativi attivi, anche sepublic/cms/ora include anche il CSS e il JS del layout pubblico spostati e può pubblicarli tramitewebblocks-cms-assets - le migrazioni nella radice restano autoritative per i checkout mantenuti da sorgente, con l'autorità di autoload di Composer nella radice del repository di manutenzione; i nuovi consumatori nativi del pacchetto installati con
webblocks:installnon devono eseguire le migrazioni dell'applicazione Laravel host durante System Update - WebBlocks UI Manager non viene più distribuito all'interno del runtime del pacchetto CMS. Il suo codice sorgente si trova in
plugins/webblocks-ui-managerper le build di manutenzione, e gli operatori lo installano manualmente come ZIP di plugin quando servono i flussi di rilascio o CDN di WebBlocks UI. - la preparazione dei pacchetti di plugin della Fase 5 mantiene classi, viste, rotte, comandi, configurazione, spazi dei nomi delle impostazioni e prefissi di database di proprietà del plugin attribuibili agli handle dei plugin; i plugin disattivati o incompatibili restano inerti e non diventano responsabilità del core del CMS
- nei consumatori del pacchetto, System Updates esegue solo le migrazioni di aggiornamento dedicate di proprietà del pacchetto da
vendor/fklavyenet/webblocks-cms/database/migrations/updatesquando presenti; in caso contrario salta l'esecuzione delle migrazioni senza contrassegnare come eseguite migrazioni arbitrarie dell'host - System Update resta una fase separata perché i suoi blocchi sono la mutazione dell'ambiente, le scritture su filesystem, l'esecuzione di Composer, i backup, le migrazioni, la persistenza della versione installata e lo stato operativo nella radice, non la proprietà di rotte o controller
Esito del consolidamento
- Consolidamento sicuro del codice di proprietà del CMS: completato
- Pulizia restante dell'inversione degli helper spostati: completata (
WebBlocks\Cms\Support\Blocks\BlockTranslationWritereCoreBlockTypeCatalogSyncerora possiedono l'implementazione; le classiApp\Support\Blocks\...nella radice restano solo wrapper di compatibilità) - Consolidamento degli URL degli asset attivi a runtime: intenzionalmente incompleto;
public/cms/...nella radice resta il percorso di compatibilità a runtime - Prontezza per la separazione dello starter: non pronta
- Confini finali rimanenti: il runtime di installazione/auth/profilo, il modello
Userdi proprietà dell'applicazione, l'autorità sulle migrazioni nella radice, l'autorità di aggiornamento e installazione nella radice e il futuro design della separazione dello starter
Prossimo lotto consigliato
Lotto consigliato: eseguire una pulizia mirata della compatibilità di modelli e supporto per le porzioni di runtime già di proprietà del pacchetto, oppure avviare la prossima revisione della strategia di asset e brand dell'amministrazione ora che il layout di amministrazione e i file sorgente CSS o JS di amministrazione sono di proprietà del pacchetto. Mantenete attiva l'autorità sugli asset di amministrazione di public/cms nella radice finché la strategia degli asset di amministrazione non sarà esplicita.
Ambito completato in questo checkpoint:
- shell pubblico e viste di pagina:
layouts.public,pages.show,search.showesearch/partials/modal - i partial di rendering delle voci di slot di pagina in
resources/views/pages/partials/slot*.blade.php - i partial distribuiti di rendering pubblico dei blocchi in
resources/views/pages/partials/blocks/* - il livello di supporto al rendering pubblico per la risoluzione delle rotte, la presentazione delle pagine pubbliche, la presentazione degli Shared Slot, la risoluzione dei wrapper di slot, l'estrazione degli overlay HTML attendibili, i registri degli overlay, l'orchestrazione delle query di ricerca, la risoluzione del sito, la risoluzione degli asset del sito e la registrazione degli eventi dei visitatori
- i wrapper di compatibilità nella radice dove i riferimenti a rotte, controller, request o viste necessitano ancora di punti di ingresso retrocompatibili nella radice
Ambito rinviato intenzionalmente da questo lotto:
- l'estrazione dei modelli Eloquent di proprietà del pacchetto per
Locale,Site,SiteDomain,Page,PageTranslation,PageSlot,Block,ContactMessage,PublicSearchIndex,VisitorEventeSystemSetting - gli URL autoritativi degli asset del pacchetto a runtime e il relativo flusso di pubblicazione
- la riprogettazione dell'autorità sulle migrazioni nella radice
- l'estrazione di System Update e del flusso di installazione e aggiornamento
Perché questo lotto è il prossimo:
- l'autorità del pacchetto su rotte, controller, request, supporto e viste di amministrazione esiste già nelle principali porzioni del runtime di amministrazione
- i partial e i componenti condivisi di amministrazione selezionati e i loro casi limite ristretti sono ora stati spostati, lasciando i confini più ampi di shell e asset
- il layout di amministrazione di proprietà del pacchetto e i file sorgente CSS o JS di amministrazione di proprietà del pacchetto dipendono ancora dal caricamento attivo di asset e brand a runtime dalla radice, quindi il passo successivo dovrebbe essere una strategia deliberata di asset e brand per l'amministrazione, invece di un altro spostamento di shell
- il prossimo lavoro di estrazione ad alto valore consiste nel ridurre le restanti ipotesi di compatibilità di modelli e supporto oppure nel progettare la strategia di asset e brand dell'amministrazione, senza entrare in migrazioni, updater, backup/ripristino, esportazione/importazione, promozione, auth/User, installer, configurazione nella radice o autorità sugli asset
Lotti grandi che dovrebbero attendere
- batch di portabilità dei siti: Export o Import insieme a Promotion dovrebbero attendere finché i loro confini di archiviazione, backup e trasferimento non saranno esplicitamente verificati
- migrazioni, asset di runtime attivi, installer, backup/ripristino, autenticazione/User e System Update devono restare fasi dedicate e separate
Alternativa se i partial condivisi rivelano un accoppiamento nascosto
Batch di riserva: una pulizia mirata della compatibilità residua di modelli e supporto per le porzioni di runtime già di proprietà del pacchetto.
Questa è l'opzione di riserva solo se i partial condivisi rivelano un accoppiamento inatteso con autenticazione, updater, backup o installazione, tale da rendere un pattern di wrapper sottile nella root troppo rumoroso per un piccolo batch di implementazione.