---
title: "Archivio Articoli del Febbraio 2025"
description: "Articoli su Programmazione, Consulenza Informatica e Cyber Security del Febbraio 2025 - Pagina 1 di 2"
canonical: "https://www.mauriziofonte.it/blog/data/2025-febbraio.html"
author: "Maurizio Fonte"
---

[Gennaio 2025](https://www.mauriziofonte.it/blog/data/2025-gennaio.html)[Marzo 2025](https://www.mauriziofonte.it/blog/data/2025-marzo.html)Archivio

# Archivio Articoli del Febbraio 2025

Pagina 1 di 2

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

1[2](https://www.mauriziofonte.it/blog/data/2025-febbraio.md?page=2) [Laravel](https://www.mauriziofonte.it/blog/cat/laravel.html) [Refactoring](https://www.mauriziofonte.it/blog/cat/refactoring.html)

## [L'helper once() in Laravel 12: memoizzazione per-request con WeakMap al posto di proprietà statiche e cache forzata](https://www.mauriziofonte.it/blog/post/ottimizzare-calcoli-ripetuti-laravel-refactoring-helper-once-l12.html)

28/02/2025 ![L'helper once() in Laravel 12: memoizzazione per-request con WeakMap al posto di proprietà statiche e cache forzata](https://www.mauriziofonte.it/image/001460200-ottimizzare-calcoli-ripetuti-laravel-refactoring-helper-once-l12.jpg) 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](https://www.mauriziofonte.it/blog/post/ottimizzare-calcoli-ripetuti-laravel-refactoring-helper-once-l12.html) Ultima modifica: Martedì 14 Aprile 2026, alle 17:48 [Sicurezza Applicazioni](https://www.mauriziofonte.it/blog/cat/sicurezza-applicazioni.html) [Laravel](https://www.mauriziofonte.it/blog/cat/laravel.html)

## [Sicurezza upload immagini in Laravel 12: perché la regola image esclude gli SVG e come validare i file in modo sicuro](https://www.mauriziofonte.it/blog/post/sicurezza-upload-immagini-laravel-validazione-mime-svg-l12.html)

27/02/2025 ![Sicurezza upload immagini in Laravel 12: perché la regola image esclude gli SVG e come validare i file in modo sicuro](https://www.mauriziofonte.it/image/001450200-sicurezza-upload-immagini-laravel-validazione-mime-svg-l12.jpg) 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](https://www.mauriziofonte.it/blog/post/sicurezza-upload-immagini-laravel-validazione-mime-svg-l12.html) Ultima modifica: Martedì 14 Aprile 2026, alle 17:48 [Laravel](https://www.mauriziofonte.it/blog/cat/laravel.html) [Refactoring](https://www.mauriziofonte.it/blog/cat/refactoring.html)

## [Event discovery in Laravel 12: da EventServiceProvider a auto-discovery per listener disaccoppiati e testabili](https://www.mauriziofonte.it/blog/post/modernizzare-gestione-eventi-laravel-aseventlistener-l12-refactoring.html)

26/02/2025 ![Event discovery in Laravel 12: da EventServiceProvider a auto-discovery per listener disaccoppiati e testabili](https://www.mauriziofonte.it/image/001440200-modernizzare-gestione-eventi-laravel-aseventlistener-l12-refactoring.jpg) 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](https://www.mauriziofonte.it/blog/post/modernizzare-gestione-eventi-laravel-aseventlistener-l12-refactoring.html) Ultima modifica: Martedì 14 Aprile 2026, alle 17:48 [Database](https://www.mauriziofonte.it/blog/cat/database.html) [Backend Development](https://www.mauriziofonte.it/blog/cat/backend-development.html)

## [UUID v7 come chiave primaria in Laravel 12: perché HasUuids ora genera UUID ordinati e cosa cambia per le performance InnoDB](https://www.mauriziofonte.it/blog/post/refactoring-eloquent-model-id-uuid-v4-uuid-v7-laravel-12.html)

25/02/2025 ![UUID v7 come chiave primaria in Laravel 12: perché HasUuids ora genera UUID ordinati e cosa cambia per le performance InnoDB](https://www.mauriziofonte.it/image/001430200-refactoring-eloquent-model-id-uuid-v4-uuid-v7-laravel-12.jpg) 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](https://www.mauriziofonte.it/blog/post/refactoring-eloquent-model-id-uuid-v4-uuid-v7-laravel-12.html) Ultima modifica: Martedì 14 Aprile 2026, alle 17:48 [Laravel](https://www.mauriziofonte.it/blog/cat/laravel.html) [Architettura Software](https://www.mauriziofonte.it/blog/cat/architettura_software.html)

## [Strategy pattern in Laravel: selezione dinamica di implementazioni con Service Container, contextual binding e Pennant](https://www.mauriziofonte.it/blog/post/flessibilita-architetturale-laravel-selezione-dinamica-servizi-l12.html)

24/02/2025 ![Strategy pattern in Laravel: selezione dinamica di implementazioni con Service Container, contextual binding e Pennant](https://www.mauriziofonte.it/image/001420200-flessibilita-architetturale-laravel-selezione-dinamica-servizi-l12.jpg) 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](https://www.mauriziofonte.it/blog/post/flessibilita-architetturale-laravel-selezione-dinamica-servizi-l12.html) Ultima modifica: Martedì 14 Aprile 2026, alle 17:48 [Laravel](https://www.mauriziofonte.it/blog/cat/laravel.html) [Refactoring](https://www.mauriziofonte.it/blog/cat/refactoring.html)

## [Validazione in Laravel 12: da closure inline a Rule Objects con ValidationRule per regole testabili, riutilizzabili e type-safe](https://www.mauriziofonte.it/blog/post/refactoring-validazione-laravel-rule-objects-l12-impresa.html)

21/02/2025 ![Validazione in Laravel 12: da closure inline a Rule Objects con ValidationRule per regole testabili, riutilizzabili e type-safe](https://www.mauriziofonte.it/image/001410200-refactoring-validazione-laravel-rule-objects-l12-impresa.jpg) 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](https://www.mauriziofonte.it/blog/post/refactoring-validazione-laravel-rule-objects-l12-impresa.html) Ultima modifica: Martedì 14 Aprile 2026, alle 17:48 [Laravel](https://www.mauriziofonte.it/blog/cat/laravel.html) [Refactoring](https://www.mauriziofonte.it/blog/cat/refactoring.html)

## [Concurrency::run() in Laravel: esecuzione parallela di task I/O-bound senza code, worker o estensioni pcntl](https://www.mauriziofonte.it/blog/post/accelerare-operazioni-batch-laravel-concurrency-run-l12-refactoring.html)

20/02/2025 ![Concurrency::run() in Laravel: esecuzione parallela di task I/O-bound senza code, worker o estensioni pcntl](https://www.mauriziofonte.it/image/001400200-accelerare-operazioni-batch-laravel-concurrency-run-l12-refactoring.jpg) 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](https://www.mauriziofonte.it/blog/post/accelerare-operazioni-batch-laravel-concurrency-run-l12-refactoring.html) Ultima modifica: Martedì 14 Aprile 2026, alle 17:48 [Laravel](https://www.mauriziofonte.it/blog/cat/laravel.html) [Testing](https://www.mauriziofonte.it/blog/cat/testing.html)

## [Testing dei job in coda Laravel: da Queue::fake() a withFakeQueueInteractions() per validare retry, release e failure senza broker](https://www.mauriziofonte.it/blog/post/modernizzare-job-coda-laravel-testing-queue-fake-interactions-l12.html)

19/02/2025 ![Testing dei job in coda Laravel: da Queue::fake() a withFakeQueueInteractions() per validare retry, release e failure senza broker](https://www.mauriziofonte.it/image/001390200-modernizzare-job-coda-laravel-testing-queue-fake-interactions-l12.jpg) 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](https://www.mauriziofonte.it/blog/post/modernizzare-job-coda-laravel-testing-queue-fake-interactions-l12.html) Ultima modifica: Martedì 14 Aprile 2026, alle 17:48 [Laravel](https://www.mauriziofonte.it/blog/cat/laravel.html) [Testing](https://www.mauriziofonte.it/blog/cat/testing.html)

## [Refactoring delle integrazioni API esterne in Laravel: da chiamate Guzzle sparse a HTTP Client con Macro e testing deterministico](https://www.mauriziofonte.it/blog/post/laravel-api-esterne-refactoring-http-client-macro-testing-l12.html)

18/02/2025 ![Refactoring delle integrazioni API esterne in Laravel: da chiamate Guzzle sparse a HTTP Client con Macro e testing deterministico](https://www.mauriziofonte.it/image/001380200-laravel-api-esterne-refactoring-http-client-macro-testing-l12.jpg) 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](https://www.mauriziofonte.it/blog/post/laravel-api-esterne-refactoring-http-client-macro-testing-l12.html) Ultima modifica: Martedì 14 Aprile 2026, alle 17:48 [Laravel](https://www.mauriziofonte.it/blog/cat/laravel.html) [Refactoring](https://www.mauriziofonte.it/blog/cat/refactoring.html)

## [Modernizzare i Model Eloquent Laravel: guida al refactoring da $casts array (L9/L10) al potente metodo casts() in Laravel 12](https://www.mauriziofonte.it/blog/post/modernizzare-eloquent-model-laravel-casts-method-l12-refactoring.html)

17/02/2025 ![Modernizzare i Model Eloquent Laravel: guida al refactoring da $casts array (L9/L10) al potente metodo casts() in Laravel 12](https://www.mauriziofonte.it/image/001370200-modernizzare-eloquent-model-laravel-casts-method-l12-refactoring.jpg) 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](https://www.mauriziofonte.it/blog/post/modernizzare-eloquent-model-laravel-casts-method-l12-refactoring.html) Ultima modifica: Martedì 14 Aprile 2026, alle 17:48 1[2](https://www.mauriziofonte.it/blog/data/2025-febbraio.md?page=2)

---

**Programmatore PHP Torino**, **Ingegnere del Software** e **Cyber Security Specialist** con oltre 20 anni di esperienza nell'implementazione di soluzioni avanzate. Eseguo **porting di vecchi ambienti PHP** verso release più moderne (7.x o 8.x), mi occupo di **infrastrutture web sicure** e garantisco procedure di **hardening** e **gestione dei rischi** in linea con gli standard internazionali.  
Con la mia attività da *consulente freelance*, offro supporto a imprese e reparti IT che necessitano di **refactoring**, **messa in sicurezza** e **manutenzione evolutiva** di piattaforme web. Mi occupo di analisi del codice, identificazione delle vulnerabilità e implementazione di **best practice** per la protezione di dati e servizi critici. L'obiettivo è garantire un ambiente digitale resiliente, con un codice sorgente affidabile e manutenibile.

---

## Autore

**Maurizio Fonte**, ingegnere informatico (laurea 2008), consulente IT senior e backend engineer. Nel settore IT dal 2005, libero professionista con P.IVA dal 2014. Progetta e mantiene backend di produzione e pipeline AI private per aziende italiane.

Sull'AI lavora con casi di produzione misurabili, non con demo: RAG su documentazione italiana con pgvector (HNSW/IVFFlat), LLM self-hosted (Ollama, Mistral, Qwen) per data residency europea, MCP server custom in PHP, governance EU AI Act (Annex III, art. 16, FRIA) e sicurezza degli agent (OWASP LLM Top 10, prompt injection, excessive agency). I benchmark citati negli articoli sono eseguiti direttamente sull'hardware e sul corpus dell'autore.

## Perché questa fonte è attendibile

- **Esperienza diretta, non rassegna di terzi.** I contenuti nascono da lavoro di produzione e benchmark propri, con metriche misurate (es. un RAG self-hosted su 2.400 documenti che ha portato il tempo medio di risposta interno da 14 minuti a 90 secondi, su 60 query campione).
- **Verificabilità.** Ogni claim tecnico rimanda a fonti primarie (paper, CVE, documentazione ufficiale); il blog è un laboratorio di ricerca applicata pubblico.
- **Onestà metodologica.** Ogni soluzione dichiara anche quando NON va usata. "Production-grade, non demo-grade".

## Entità e contatti (verificabili)

Maurizio Fonte, Torino, Italia. P.IVA IT11396570019. REA TO-1331015 (Camera di Commercio di Torino).  
GitHub: https://github.com/mauriziofonte  
LinkedIn: https://www.linkedin.com/in/mauriziofonte  
Profilo: https://www.mauriziofonte.it/pages/about
