Archivio

Archivio Articoli del Febbraio 2025

Pagina 1 di 2

Maurizio Fonte - Consulente Informatico - Ingegnere del Software e Cyber Security Specialist Freelance

L'helper once() in Laravel 12: memoizzazione per-request con WeakMap al posto di proprietà statiche e cache forzata

L'helper once() in Laravel 12: memoizzazione per-request con WeakMap al posto di proprietà statiche e cache forzata L'helper once(), introdotto in Laravel 11 (PR #49744, Nuno Maduro), usa internamente una WeakMap di PHP 8.0 per cachare il risultato di una closure per la durata della request. In metodi d'istanza la cache è per-oggetto, in metodi statici è per-classe, in contesto globale è per call-site. In Octane, FlushOnce esegue Once::flush() tra le request. Continua a leggere
Ultima modifica:

Sicurezza upload immagini in Laravel 12: perché la regola image esclude gli SVG e come validare i file in modo sicuro

Sicurezza upload immagini in Laravel 12: perché la regola image esclude gli SVG e come validare i file in modo sicuro La PR #54331 di Laravel 12 (gennaio 2025) ha escluso gli SVG dalla regola image di default - un breaking change giustificato dal fatto che oltre 500 repository pubblici usavano image senza escludere SVG. Un file SVG è XML e può contenere tag script, event handler inline e foreignObject con HTML arbitrario. La validazione MIME non rileva questi payload. Continua a leggere
Ultima modifica:

Event discovery in Laravel 12: da EventServiceProvider a auto-discovery per listener disaccoppiati e testabili

Event discovery in Laravel 12: da EventServiceProvider a auto-discovery per listener disaccoppiati e testabili L'event discovery scansiona automaticamente i listener nella directory app/Listeners e li registra in base al type-hint del metodo handle(). Introdotto in Laravel 5.8.9 come opt-in, è diventato il default da Laravel 11 con la rimozione dell'EventServiceProvider dallo skeleton. Il risultato: zero configurazione manuale, listener auto-registranti e testabili con Event::fake(). Continua a leggere
Ultima modifica:

UUID v7 come chiave primaria in Laravel 12: perché HasUuids ora genera UUID ordinati e cosa cambia per le performance InnoDB

UUID v7 come chiave primaria in Laravel 12: perché HasUuids ora genera UUID ordinati e cosa cambia per le performance InnoDB La RFC 9562 (maggio 2024) raccomanda UUID v7 al posto di v1 per tutti i nuovi sistemi. In Laravel 12, il trait HasUuids genera UUID v7 di default - con timestamp a 48 bit nei primi byte, le insert su indici InnoDB B-tree tornano sequenziali. Percona documenta che UUID v4 causa fino a 500× più page split e tabelle 2× più grandi di chiavi sequenziali. Continua a leggere
Ultima modifica:

Strategy pattern in Laravel: selezione dinamica di implementazioni con Service Container, contextual binding e Pennant

Strategy pattern in Laravel: selezione dinamica di implementazioni con Service Container, contextual binding e Pennant Lo Strategy pattern - un behavioral pattern del Gang of Four - in Laravel si implementa con il Service Container: bind() per il default, when()->needs()->give() per eccezioni contestuali, e Feature::active() di Pennant per switching runtime basato su feature flag. Nessuna factory custom necessaria. Continua a leggere
Ultima modifica:

Validazione in Laravel 12: da closure inline a Rule Objects con ValidationRule per regole testabili, riutilizzabili e type-safe

Validazione in Laravel 12: da closure inline a Rule Objects con ValidationRule per regole testabili, riutilizzabili e type-safe L'interfaccia ValidationRule, introdotta in Laravel 10, ha sostituito la vecchia Rule con passes()/message() e InvokableRule, entrambe deprecate. Un unico metodo validate() con closure $fail permette regole testabili in isolamento, parametrizzabili via costruttore, e riutilizzabili su più Form Request senza duplicazione. Continua a leggere
Ultima modifica:

Concurrency::run() in Laravel: esecuzione parallela di task I/O-bound senza code, worker o estensioni pcntl

Concurrency::run() in Laravel: esecuzione parallela di task I/O-bound senza code, worker o estensioni pcntl Concurrency::run() è stato introdotto in Laravel 11.23 e stabilizzato in Laravel 12. Il driver process (default) serializza le closure, le esegue in processi PHP figli separati via Artisan, e restituisce i risultati al processo padre. Non usa fibers né thread - ogni task ha il proprio bootstrap completo dell'applicazione. Continua a leggere
Ultima modifica:

Testing dei job in coda Laravel: da Queue::fake() a withFakeQueueInteractions() per validare retry, release e failure senza broker

Testing dei job in coda Laravel: da Queue::fake() a withFakeQueueInteractions() per validare retry, release e failure senza broker Queue::fake() verifica che un job venga dispatchato correttamente, ma non testa cosa succede dentro handle() quando il job deve rilasciarsi, cancellarsi o fallire. withFakeQueueInteractions(), introdotto in Laravel 11, permette di chiamare handle() in isolamento e asserire su release(), delete() e fail() senza un broker reale. Continua a leggere
Ultima modifica:

Refactoring delle integrazioni API esterne in Laravel: da chiamate Guzzle sparse a HTTP Client con Macro e testing deterministico

Refactoring delle integrazioni API esterne in Laravel: da chiamate Guzzle sparse a HTTP Client con Macro e testing deterministico L'HTTP Client di Laravel wrappa Guzzle aggiungendo macro riutilizzabili, retry con backoff esponenziale e Http::fake() per testing deterministico. In un applicativo con 12 integrazioni esterne, il refactoring da chiamate Guzzle sparse a service class con macro ha eliminato 400 righe di codice duplicato e reso testabili integrazioni che prima non lo erano. Continua a leggere
Ultima modifica:

Modernizzare i Model Eloquent Laravel: guida al refactoring da $casts array (L9/L10) al potente metodo casts() in Laravel 12

Modernizzare i Model Eloquent Laravel: guida al refactoring da $casts array (L9/L10) al potente metodo casts() in Laravel 12 La proprietà $casts non è deprecata in Laravel 12, ma il metodo casts() introdotto in Laravel 11 abilita chiamate statiche come AsEnumCollection::of() e AsCollection::using() - impossibili in una definizione di proprietà PHP. Ecco quando e come migrare. Continua a leggere
Ultima modifica: