Una settimana di Symfony #1030 (21–27 settembre 2026) (Symfony Blog)
Questa settimana Symfony ha continuato a svelare nuove funzionalità di Symfony 8.2, tra cui nuove opzioni di Messenger e prestazioni migliori, miglioramenti alla gerarchia dei ruoli, JSON Schema per la configurazione e nuove funzionalità di Mailer. Inoltre, è stato rilasciato Symfony UX 3.5 con un nuovo pacchetto Pagination e molti altri miglioramenti, mentre Twig 4.0 ha introdotto la composizione dei blocchi a runtime. Infine, abbiamo pubblicato un nuovo case study su Yuka e annunciato altri interventi per il prossimo SymfonyCon Warsaw 2026.
Punti salienti dello sviluppo di Symfony
Questa settimana sono state unite 167 pull request (135 nel codice e 32 nella documentazione) e sono state chiuse 62 issue (26 nel codice e 36 nella documentazione). Escludendo i merge, 47 autori hanno effettuato aggiunte e rimozioni. Vedi i dettagli per il codice e la documentazione.
- 5c9a38a: [Messenger] correzione del ritardo di InMemoryTransport quando attraversa un cambio di ora legale
- db74510: [Workflow] escape dell'hash nelle etichette Mermaid
- b5bff47: [FrameworkBundle] correzione di DotenvVault che corrompeva un valore contenente un back-reference
- fa9a95f: [Messenger] correzione della perdita dei ritardi inferiori al secondo da parte del transport Doctrine
- 185070c: [ErrorHandler] rimozione del backtrace dall'array conservato da FatalError
- 2fac413: [HttpClient] non impostare CURLOPT_WRITEFUNCTION dall'interno della write callback
- 5c84169: [DependencyInjection] correzione dello spostamento dei tag sul decorator più esterno quando un decorator è decorato
- c668950: [Messenger] evitare la priorità 0 durante il retry dei messaggi AMQP
- 86b9e70: [Uid] correzione del confronto tra un Uuid e un Ulid
- d5a6ba8: [Serializer] correzione della denormalizzazione della proprietà discriminator type quando un name converter la rinomina
- 0e5cab2: [HttpFoundation] rendere non serializzabili gli handler di sessione
- 423a67d: [Messenger] correzione di una deprecazione di doctrine/dbal 4.5 in DoctrinePostgreSqlFilterIntegrationTest
- 564db2e: [HttpClient] non rifiutare le risposte altamente compresse
- cdb6936: [HttpClient] correzione di NativeHttpClient::stream() che saltava le risposte non ancora aperte
- 6cad787: [SecurityBundle] dispatch degli eventi dei firewall che condividono un contesto sul loro dispatcher
- ffc05a1: [Doctrine] risoluzione dei tipi DBAL tramite la connessione invece del registro statico
- 926ca5d: [WebProfilerBundle] correzione degli URL lunghi che fuoriuscivano dalla tabella delle richieste AJAX nella toolbar
- ec2e9ae: [WebProfilerBundle] troncamento degli URL non-GET lunghi nella tabella delle richieste AJAX
- f8b6e6f: [Form] smettere di usare il matcher any() deprecato in ValidatorExtensionTrait
- 74adc1a: [Finder] evitare il backtracking quadratico quando i glob contengono asterischi consecutivi
- 1f9f467: [HttpKernel] correzione della lettura dei listener del dispatcher predefinito da un EventDataCollector deserializzato
- 95dd9c0: [Finder] trattare un file .git come radice del repository in ignoreVCSIgnored()
- 9bd069f: [DoctrineBridge] correzione di DoctrineExtractor per i tipi uid e le collezioni indicizzate da tipi personalizzati
- fcfe176: [Serializer] correzione del tempo quadratico durante la raccolta degli errori di denormalizzazione
- 7560c58: [Yaml] correzione di diversi casi limite di parsing
- 3775511: [Yaml] correzione dei tag !!str e !!float sugli scalar block
- 8b2693a: [Yaml] correzione delle tabulazioni negli scalar block e dei commenti dopo quelli vuoti
- 6261351: [Scheduler] correzione degli schedule stateful che saltavano ogni esecuzione quando il checkpoint non poteva essere salvato
- 92b0b08: [Security] mantenere i nomi reali dei ruoli nelle etichette del dump Mermaid
- 69419f0: [SecurityBundle] rendere l'albero di configurazione remember-me indipendente dalla configurazione della sessione
- 9322503: [Validator] correzione del PHPDoc di Range per accettare min/max di \DateTimeInterface
- 2b39fff: [Uid] correzione dell'ordinamento di UuidV7 quando l'orologio va indietro
- a194d22: [WebProfilerBundle] contrassegnare le richieste EventSource come terminate alla chiusura
- 29a4281: [WebProfilerBundle] correzione di EventSource::close() su richieste già terminate o ripulite
- fe67450: [AssetMapper] correzione dei loader CSS e JSON che si rompevano con es-module-shims
- 92172c1: [Validator] prevenire l'iniezione di opzioni ffprobe dai nomi dei file video
- e3a4eed: [TypeInfo] correzione della risoluzione dei nomi di classe nel namespace globale
- 0fc3679: [HttpKernel] non inviare di nuovo gli header in HttpKernel::terminateWithException()
- 983846b: [TypeInfo] correzione della risoluzione delle costanti class keyword senza contesto di tipo
- 536ea2d: [TypeInfo] correzione della risoluzione delle costanti di classe sconosciute
- eaedf88: [TypeInfo] correzione della risoluzione delle chiavi di array shape in StringTypeResolver
- 9aa60b0: [Uid] correzione di Ulid::isValid() che accettava stringhe base-58 superiori a 2^128
- 7737789: [HttpClient] allineare GuzzleHttpHandler a Guzzle quando on_headers genera un'eccezione
- bb804ad: [Security] registrare il claim acr OIDC e nominare l'attributo che ha avviato una ri-autenticazione
- 9031d63: [KeyManagement] consentire alla factory AWS di usare il client HTTP dell'applicazione
- 838edaa: [FrameworkBundle] correzione degli alias di classe deprecati mancanti dalla class map
- d4ed974: [Security] leggere una risposta di autorizzazione OIDC inviata dal provider (form_post)
- 6e7551e: [Config, FrameworkBundle, Lock, SecurityBundle] rendere gli alberi di configurazione indipendenti dallo stato di runtime
- 4c03d4d: [PhpUnitBridge] aggiunta del resolver dei trigger di issue di DebugClassLoader
- dd9b2dc: [KeyManagement] aggiunta di CompositeKms, un client che incapsula più provider
- 8015b6f: [HttpClient, WebProfilerBundle] mostrare la durata e le dimensioni trasferite di ogni richiesta nel profiler
- fe413d9: [Validator] consentire Valid in Sequentially
- 86b6948: [DependencyInjection, EventDispatcher] ordinare servizi e listener taggati con vincoli before/after
- 6a7cf3d: dichiarare le dipendenze di ordinamento dei listener con before/after
- 08d4f4c: [KeyManagement] consentire a store.max_age di esprimere "mai ruotare" con null
- 4ab2eff: [Form] aggiunta dell'opzione entry_name a CollectionType e PolymorphicCollectionType
- af69f61: [Uid] smettere di dipendere dall'estensione uuid e velocizzare le conversioni
- 2b520d1: [DependencyInjection] accettare valori di estensione non-array nella shape AppReference
- 92afce6: [Config] rifiutare i placeholder env di tipo sconosciuto sui nodi array
- 849c3cb: [Uid] correzione del rilevamento dei fork dopo che l'orologio è andato indietro
- 4f75d5b: [HttpClient] esporre i trailer HTTP come info di risposta trailers
- 991d8b0: [KeyManagement] correzione di una deprecazione di doctrine/dbal 4.5 in DataKeyStoreTest
- 7a74946: [Serializer] deprecare la denormalizzazione di una proprietà usando il suo nome raw quando è configurato un name converter
- 1a0f879: [HttpClient] aggiunta del supporto per l'opzione di richiesta on_trailers a GuzzleHttpHandler
- ecca80e: [KeyManagement] memoizzare le chiavi Flysystem con reset opzionale
- 11dc19d: [KeyManagement] aggiornare i token KMS rifiutati dopo risposte 401
- 69e66e3: [DependencyInjection] ignorare le variabili env dei valori sovrascritti inoltrati dagli alias delle estensioni
- f7c2ce0: [HtmlSanitizer] velocizzare allowSafeElements() e allowStaticElements()
- caf9f7a: [Routing] velocizzare la generazione degli URL saltando i passaggi che non fanno nulla
- 51ffe80: [Config] evitare di creare un'eccezione a ogni controllo di freschezza della cache di configurazione
- b5493f7: [AssetMapper] saltare le ricerche del mapper per i percorsi pubblici renderizzati dall'import map
- de34bd7: [DependencyInjection] scrivere la directory del container con un solo rename invece di uno per file
- aa9f9cd: [HttpKernel] comprimere i profili con gzip livello 1
- 540085e: [Intl] cercare il file di dati non compresso prima di quello compresso
- 727cf2b: [Cache] controllare le directory del pool filesystem tramite la cache realpath
- 12b3110: [HttpFoundation] velocizzare il parsing degli header Cache-Control
- 53eb51a: [EventDispatcher, HttpKernel] costruire gli stub dei listener solo quando viene visualizzato il pannello degli eventi
- 5285d65: [HttpKernel, VarDumper] saltare gli estratti di codice sorgente nelle tracce delle deprecazioni raccolte
- ffd3985: [DependencyInjection] precaricare EnvNotFoundException
- 98bf1e8: [Config] velocizzare i controlli di freschezza di GlobResource usando gli mtime delle directory
- 2b376c4: [KeyManagement] validare gli ID delle chiavi di Azure Key Vault
- 69c1ef4: [Validator] prevenire l'iniezione di opzioni ffprobe dai nomi dei file
- e53e3c0: [Validator] ridurre l'utilizzo di memoria in WordCountValidator
- 085b935: [Translation] registrare ogni directory delle traduzioni una sola volta
- 227985c: [SecurityBundle] rendere lazy l'expression language e gli handler degli authenticator
- e375ae7: [Config] rilevare le modifiche effettuate nello stesso secondo in cui è stata creata una cache
- 5d81d2e: [Cache] saltare APCu nelle cache di sistema quando OPcache è abilitato e la loro directory è scrivibile
- 91a2445: [FrameworkBundle] registrare il loader delle variabili env dei secret solo quando esiste una directory vault
- 172e4ad: [AssetMapper] mantenere i metadati compilati decodificati nella cache di sistema
- d5aeac6: [DependencyInjection] sostituire i placeholder env in un solo passaggio in ContainerBuilder::resolveEnvPlaceholders()
- 575cc5f: [SecurityBundle] saltare la registrazione degli algoritmi web-token quando la libreria non è installata
- 7ad5e3d: [DependencyInjection] saltare i controlli ridondanti del filesystem durante la ricerca dei percorsi vendor
- c149e61: [HttpKernel] terminare la risposta prima di salvare i profili
- 5b23e4e: [Yaml] aggiunta del supporto per il parsing di uno scalar block come nodo radice
- ef79b50: [Cache] evitare di includere file mancanti in PhpFilesAdapter
- 9eb97f2: [Cache] restituire direttamente gli hit del primo adapter da ChainAdapter::get()
- 515b83e: [Cache] restituire gli hit da get() prima di creare la closure di calcolo
- 7733a5d: [FrameworkBundle] clonare solo le definizioni che contengono variabili env durante il dump del container per il debug
- fcc0c33: [Cache, Contracts] condividere il controllo di scadenza anticipata di CacheTrait con ContractsTrait
- 33eed31: [Yaml] gestire i tag sugli scalar block come sugli altri valori
- 6ea4859: [Cache, Contracts, Scheduler] segnalare i salvataggi falliti tramite l'argomento $metadata di CacheInterface::get()
- 6229830: [AssetMapper] conflitto con pacchetti Symfony UX obsoleti
Le issue e pull request più recenti
- [FrameworkBundle] Consentire l'uso di un serializer con nome per #[MapRequestPayload], #[MapQueryString] & #[Serialize]
- [RFC] Un componente Durable: esecuzione durevole sopra Messenger
- [DependencyInjection] Aggiungere i vincoli within e around per ordinare i decorator
- [TypeInfo] Aggiungere Type::map()
- [Validator] Rendere invokable gli oggetti Constraint
Altri articoli recenti
Laravel AI 1.1 e 1.2: Agent Skills, Cohere e structured output più solidi
Le release 1.1.0 e 1.2.0 di laravel/ai portano gli Agent Skills, l'approvazione obbligatoria per i tool built-in e nuovi provider come Cohere e Laya self-hosted. Sul fronte qualità arrivano i fix allo structured output per Bedrock e il supporto alle provider options. Aggiornati anche i modelli di default, con Claude 4.7+ che ignora i sampling params.
Laravel 13.35.0: scheduler più controllabile, code più flessibili e response Markdown
Laravel 13.35.0 porta Schedule::alwaysOnOneServer(), il supporto a schedule:interrupt per i comandi di lunga durata, --memory in percentuale per queue:work e il nuovo metodo markdown() sulla response factory. Tante piccole migliorie anche a test, view compilate in parallelo e dischi local.
BashBox: un interprete Bash in sandbox per agenti AI in PHP
BashBox è un interprete bash scritto in puro PHP che permette di eseguire gli script generati dagli agenti AI senza mai ricorrere a proc_open, exec o shell_exec. Ogni comando è una classe PHP che lavora su un filesystem virtuale, con limiti di esecuzione, quote disco e accesso di rete configurabili. Ideale per chi sviluppa agenti con il Laravel AI SDK o altre librerie simili.