Una settimana di Symfony #1024 (10–16 agosto 2026) (Symfony Blog)
Questa settimana, l'attività di sviluppo per la prossima release Symfony 8.2 è stata molto intensa: PropertyInfo ha reso accessors e mutators configurabili con attributi, HttpFoundation ha aggiunto supporto mirato per Cache-Control conforme alla RFC 9213, gli attributi di Console ora possono usare callable per descrizioni e testo di aiuto, Messenger ha aggiunto un'opzione di concorrenza per elaborare i messaggi in parallelo, e Mailer ha introdotto il supporto per transport con limitazione di velocità. Inoltre, abbiamo annunciato il Symfony AI Core Team.
Punti salienti dello sviluppo di Symfony
Questa settimana, 173 pull request sono state unite (140 nel codice e 33 nella documentazione) e 69 issue sono state chiuse (46 nel codice e 23 nella documentazione). Escludendo le merge, 70 autori hanno fatto aggiunte e rimozioni. Vedi i dettagli per il codice e la documentazione.
- cbc6e73: [HttpKernel] corretta variabile non definita quando il blocco della creazione del container fallisce presto
- 20e4b52: [HttpFoundation] combinati i pattern di host fidati in un'unica regexp
- d889af3: [Console] ripristinato lo stato catchExceptions dopo l'esecuzione di un comando di messaggio
- caad9bd: [Messenger] supporto per URL di code dalle partizioni aws-cn e aws-eusc in AmazonSqs
- 00ad623: [AssetMapper] incluso il front controller negli URL degli asset di sviluppo
- 6493f7a: [Mime] non eliminare l'ultima riga di un messaggio basato su risorsa
- fe928b0: [PropertyInfo] ignorare i metodi che sembrano solo accessor
- b49cded: [DependencyInjection] corretti i riferimenti circolari tramite espressioni
- da13fb1: [FrameworkBundle] reimpostato il listener del notification logger tra un messaggio e l'altro
- aefe26f: [Cache] corretta la protezione contro lo stampede che non veniva disabilitata su CLI
- 3332935: [DoctrineBridge] corretta la rimozione dei listener lazy per oggetto
- 80bbdbd: [Messenger] gestito il nack sincrono in batch
- 0bed777: [HttpClient] rimozione di codice non utilizzato in AsyncResponse::__destruct()
- 217f22b: [HttpClient] corretto il guard di consumo non armato in AsyncResponse::stream()
- d046a5e: [HttpClient] corretta la risposta wrappata abbandonata che lanciava un'eccezione al destruct
- 13d1949: [Translation] non estrarre messaggi da classi che si chiamano semplicemente TranslatableMessage
- 347dff0: [Serializer] lancia un'eccezione su dati XML senza nodo root
- a23b6cc: [DependencyInjection] corretti gli attributi di tag a livello di classe che venivano sovrascritti da quelli a livello di interfaccia
- 439ada5: [Uid] confronta i tempi per valore in MockUuidFactory
- 503e53b: [Console] mantieni le risposte falsy quando si raccoglie un array con #[Ask]
- 7e210be: [Notifier] corretti gli invii riusciti che venivano segnalati come falliti in Sevenio
- f61f832: [Mailer, Notifier] evita di conservare i messaggi senza il profiler
- c81894e: [FrameworkBundle] tollera una forma più recente di InstanceofType di DependencyInjection nella fixture di riferimento
- aea5616: [FrameworkBundle] non far trapelare il corpo della risposta da assertResponseRedirects() quando non è verboso
- b94e5f6: [Tui] tratta una dimensione del terminale pari a zero come sconosciuta
- b74c87b: [Console] corretta la lettura dell'attributo #[Target] sugli argomenti dei comandi invocabili
- 50c86ca: [WebProfilerBundle] spostate le macro nella root del template
- 4319188: [Tui] corretta la composizione dello stdin e la decodifica degli ID dei tasti
- 857bb05: [Tui] corretto il calcolo della larghezza delle colonne
- fe24ea2: [Tui] riutilizza i sottoalberi in cache durante il layout verticale
- 4f6e767: [Tui] traccia le posizioni dei discendenti dei figli del layout orizzontale in cache
- c307c59: [Tui] clamp dei bordi che non rientrano nel loro contenitore
- e918927: [FrameworkBundle] collega il parser delle richieste webhook con i nomi di header configurati
- a33ed46: [Serializer] converte gli elementi delle collezioni scalari
- 708f63f: [ObjectMapper] corretto il riutilizzo di un oggetto già mappato per un target differente
- 0fc8e9b: [VarExporter] suddiviso Exporter::export() in modo che non faccia crashare il compilatore JIT di PHP 8.5
- f7504bf: [Form] offre l'identificatore del fuso orario canonico quando gli ID ICU collidono
- a766a54: [Console] aggiunte le modalità di opzione nascoste e deprecate
- b025beb: [RemoteEvent, Notifier] aggiunti eventi di engagement SMS
- 2216fd2: [DependencyInjection] scritto un file CACHEDIR.TAG nelle directory di cache e build
- b9707fc: [Validator] controlla le estensioni dei file e i mimeTypes in modo indipendente
- 62a295c: [FrameworkBundle] consente di abilitare i lock advisory su una risorsa di lock
- db52959: [Notifier] aggiunto il bridge per Facebook Page
- f05b8a0: [HttpFoundation] deprecata la proprietà Request::$trustedHosts non utilizzata
- ccc7d0a: [Clock] aggiunto attributo #[NoDiscard] a DatePoint
- 78ba59d: [Notifier] aggiunto il bridge Instagram
- f0ead93: [Notifier] aggiunto il bridge Threads
- efe12db: [PropertyInfo] consente di definire accessors e mutators tramite un attributo
- 06e4e07: [Translation] fa sì che CrowdinProvider::read() recuperi tutti i domini quando non ne viene passato nessuno
- 385b35a: [PropertyInfo, Serializer] abilita l'uso di #[WithAccessors] con il serializer
- c8b27e7: [Workflow] aggiunge tipi generici predefiniti agli eventi del Workflow
- 83f61bf: [SecurityBundle] deprecate le regole di controllo accessi che votano su molti attributi
- 588feba: [Webhook] aggiunto header timestamp e supporto firme Standard Webhooks
- 3b11ffb: [Messenger] consente la creazione automatica della coda SQS
- 1a73e47: [ObjectMapper] aggiunto MappingAwareTransformCallableInterface
- 05fb6e5: [Translation] mantiene il contesto dei messaggi nei file PO
- de3a2a2: [HttpFoundation] aggiunto supporto mirato per cache-control (RFC 9213)
- d44edfe: [Security, SecurityBundle] supporto per decorare handler di risultati di autenticazione personalizzati
- 3feb3b5: [Messenger] arrotonda i ritardi per limitare il numero di code di ritardo in Amqp
- 0270644: [Console] consente callable per la descrizione e l'aiuto di #[AsCommand], #[Argument] e #[Option]
- f2cfaf6: [DependencyInjection] aggiunto argomento factory nell'attributo #[Autoconfigure] e abilitato anche l'uso di factory all'interno di condizionali instanceof
- 0871883: [Yaml] aggiunto supporto per tag yaml int, null, bool inclusi i virgolette
- 264083a: [Messenger, Routing] aggiunto RequestContext::runWith() per generare temporaneamente URL per un altro contesto
- 10d69b9: [HttpKernel] deserializza un parametro di query JSON con #[MapQueryString(key:)]
- 46fb63f: [EventDispatcher] non inizializzare i listener lazy quando non possono corrispondere
- 4747b29: [DependencyInjection] velocizzato ResolveInstanceofConditionalsPass
- 296e499: [DoctrineBridge, EventDispatcher] rimanda la rimozione dei listener lazy invece di inizializzarli
- d70b2ec: [Serializer] aggiunto AbstractNormalizer::IGNORED_GROUPS per rendere possibile ignorare gruppi durante la serializzazione
- 0f2fb46: [FrameworkBundle] rende le assertion di BrowserKit non verbose per impostazione predefinita
- 7967754: [Mailer] aggiunto return_path_domain al payload in Mandrill
- f048769: [Console, Yaml] aggiunto un formato di output gitlab al comando lint:yaml
- 997b83f: [HttpClient] aggiunto supporto per il metodo HTTP QUERY a CachingHttpClient
- e5aedb1: [Notifier] aggiunto SlackPlainTextInputBlock per messaggi Slack
- 523de6f: [Notifier] aggiunto bridge SMS Proxima
- dd106ac: [SecurityBundle] aggiunto grafo della gerarchia dei ruoli al pannello di sicurezza del profiler
- 6242646: [WebProfilerBundle] corretta la variabile has_dump mancante
- 5bee8a6: [Messenger] aggiunto supporto per code eque SQS
- 88b63e2: [WebProfilerBundle] visualizza l'URL del profiler nei log
- d6fd147: [HttpFoundation] constraint ResponseHeaderSame ora mostra il valore effettivo dell'header
- 0822e9f: [FrameworkBundle, HttpClient] aggiunta l'opzione retry_failed.base_uris a http_client
- bc46c34: [Validator] aggiunta un'opzione message al constraint Callback
- aebbeea: [DoctrineBridge] deprecato DoctrineCloseConnectionMiddleware in favore del nuovo DoctrineDbalCloseConnectionMiddleware
- e244dff: [Tui] riutilizza righe invariate tra frame
- 2ddce33: [FrameworkBundle] risolve i percorsi debug:config le cui chiavi contengono punti
- 4ca21cd: [HttpKernel] prefissa il percorso della proprietà ai messaggi di violazione di RequestPayloadValueResolver
- 3fae4b7: [DomCrawler] aggiunto ChoiceFormField::selectByText() per selezionare un'opzione tramite il suo contenuto testuale
- c5f8853: [Messenger] mette in cache la gerarchia dei tipi di messaggio
- b437076: [Form, TwigBridge] renderizza un id sull'elemento del form in modo che i riferimenti form_attr si risolvano
- 02b2550: [Messenger] aggiunta un'opzione --concurrency al comando messenger:consume per elaborare i messaggi in parallelo
- a0462a6: [PropertyInfo] raccoglie dati dagli hook di proprietà in ReflectionExtractor
- 7c0cfc5: [Serializer] supporta nomi e percorsi serializzati configurabili per gruppo
- 561397b: [Validator] gestisce proprietà di oggetti nel validator Unique
- c54a8e1: [DoctrineBridge] deprecato DoctrineOpenTransactionLoggerMiddleware in favore del nuovo DoctrineDbalOpenTransactionLoggerMiddleware
- 432042e: [Form] aggiunto PolymorphicCollectionType per collezioni i cui elementi non condividono tutti lo stesso tipo
- 5b36e9e: [Security] consente wildcard come segnaposto nella gerarchia dei ruoli
- 4e6fb00: [DoctrineBridge] deprecato DoctrinePingConnectionMiddleware in favore del nuovo DoctrineDbalPingConnectionMiddleware, aggiunto DoctrineDbalTransactionMiddleware
- 42ff5be: [SecurityBundle] aggiunto un comando debug:roles per ispezionare la gerarchia dei ruoli
- d896c56: [Messenger] aggiunto --redispatch a messenger:failed:retry
- ea3c360: [Messenger] priorità ai receiver tramite la configurazione del transport
- d1093c3: [Cache] aggiunto PdoTagAwareAdapter
- af40eee: [Cache, FrameworkBundle] collega PdoTagAwareAdapter come cache.adapter.pdo_tag_aware
- 6e7df76: [Serializer] aggiunta opzione force_collection a XmlEncoder
- 235a365: [Cache] implementato PruneableInterface su RedisTagAwareAdapter
- 3788ca4: [Notifier] aggiunto supporto API Firebase v1
- e7edfc7: [Config] genera schema JSON per la configurazione
- d0214d3: [Mailer] aggiunto supporto per i transport di posta con limitazione di velocità
Nuove issue e pull request
- [Form][TwigBridge] Consente all'opzione group_by di ChoiceType di restituire etichette traducibili
- [PropertyAccess] Aggiunge letture con wildcard
- [Tui] Aggiunge sfondi sfumati (lineari, punti di colore)
- [Serializer] Gli elementi di collezione scalari non vengono validati contro il loro tipo dichiarato
Offerte di lavoro Symfony
Queste sono alcune delle più recenti offerte di lavoro Symfony:
- Symfony Developer presso ATH
Contratto / Freelance - €25 – €50 / ora
Full remote
Vedi dettagli - Lead Symfony Developer presso DocuPet
Full-time - CA$140.000 – CA$180.000 / anno
Full remote
Vedi dettagli
Puoi pubblicare un'offerta di lavoro Symfony gratuitamente su symfony.com.
Hanno parlato di noi
- Unirsi al Symfony AI Core Team
- Symfony e PHP 8.4: Modernizzare senza riscrivere tutto
- Stai davvero sfruttando al massimo l'analisi statica del codice?
- Costruire un assistente di code review basato su RAG con PHP, Ollama e Qdrant
- Costruisci un'API JSON-RPC 2.0 in Symfony in 15 minuti: dal composer require a OpenAPI
- PHP 8.4 Lazy Objects, parte 2: Dai proxy generati ai lazy objects nativi: come Symfony e Doctrine si sono evoluti
- Quando la cache di Symfony rallenta la tua applicazione…
- Costruire un assistente di code review RAG con PHP, Ollama e Qdrant
- Symfony JSON-RPC API Bundle tre anni dopo: cosa ha fatto l'operatività in produzione al codice
Prossimi eventi Symfony
- Sylius France Community Meetup di ACSEO: Aix en Provence, Francia (28 settembre 2026)
Invito all'azione
- Segui Symfony su X, su Mastodon, su Bluesky e su Threads e condividi questo articolo.
- Iscriviti al feed RSS del blog di Symfony e non perdere mai più una storia di Symfony.
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.