notiziephp.it

A Week of Symfony #1032 (5–11 ottobre 2026) (Symfony Blog)

Traduzione da Symfony Blog
11 Ottobre 2026 Tempo di lettura: 15 minuti
A Week of Symfony #1032 (5–11 ottobre 2026) (Symfony Blog)

Questa settimana abbiamo pubblicato nuovi articoli sulle funzionalità in arrivo in Symfony 8.2, tra cui il Cache-Control mirato, l'ordinamento relativo per listener e servizi, l'event dispatcher compilato, i tre nuovi vincoli di validazione e gli URL firmati monouso. Nel frattempo, lo sviluppo di Symfony 8.2 è proseguito a ritmo sostenuto, introducendo funzionalità come i workflow definiti con gli attributi PHP, un nuovo attributo Lock per rifiutare o ritardare le richieste concorrenti e un RecorderHttpClient per registrare e riprodurre gli scambi HTTP. Infine, abbiamo svelato altri talk per la SymfonyCon Warsaw 2026.

Questa settimana sono state unite 258 pull request (160 nel codice, 71 nella documentazione, 19 in UX e 8 in AI) e sono state chiuse 82 issue (33 nel codice, 42 nella documentazione, 3 in UX e 4 in AI). Escludendo i merge, 63 autori hanno effettuato aggiunte e rimozioni. Vedi i dettagli per codice, documentazione, UX e AI.

Changelog 6.4:

  • d3919f8: [Process] corretto waitUntil() che perdeva l'output letto dai propri aggiornamenti di stato
  • 82fbe9c: [Yaml] non trattare le chiavi << tra virgolette come chiavi di merge
  • 1bc6505: [Messenger] corretta l'associazione delle conferme del publisher AMQP al rispettivo messaggio dopo un timeout
  • 49611f7: [Security] non copiare il token di sicurezza della sessione nei log
  • 6235cfb: [Cache, FrameworkBundle] mettere in cache le espressioni analizzate degli attributi #
  • 3c8d7d6: [SecurityBundle] corretto il warmup della cache delle espressioni access_control
  • 601ce74: [HttpKernel] rilasciare il lock di build del container nel percorso di errore
  • 1e8ead8: [AssetMapper] ripulire l'asset in corso di creazione quando un compiler fallisce
  • 771b526: [SecurityBundle] rendere lazy l'expression language di #[IsGranted]
  • 949faad: [ExpressionLanguage] corretta la rivalutazione di un'espressione analizzata dopo che un operatore null-safe l'ha interrotta
  • 0217edf: [FrameworkBundle] impedire a Monolog di sovrascrivere php_errors.log: false
  • 38c5ae7: [Filesystem] corretta touch() con timestamp a zero
  • f432353: [HttpKernel] corretto HttpCache che restituiva un 500 invece di un 503 per le voci ESI obsolete quando la cache è bloccata
  • 1b08799: [HttpKernel] corretto il leak di un output buffer in HttpCache quando un frammento ESI fallisce
  • da096fa: [PsrHttpMessageBridge] usare la stringa vuota invece di null come offset di un array
  • 18f7886: [Console] costruire i listener dei segnali lazy prima che un segnale possa interrompere un autoload
  • 2629d0e: [WebProfilerBundle] servire phpinfo() come testo semplice quando PHP gira con la SAPI CLI
  • ba2e860: [Process] impedire che le SYMFONY_DOTENV_VARS ereditate sovrascrivano le variabili d'ambiente passate esplicitamente
  • db791ab: [HttpFoundation] non avvisare per chiavi di input della richiesta annidate troppo in profondità
  • acc4071: [Clock] corretta MockClock::sleep() con date precedenti al 1970
  • 24e1c0a: [Clock] corretto new DatePoint() che risultava sfasato di un'ora durante l'ora di ritorno dell'ora legale
  • 1be85cf: [Yaml] accorpare gli spazi bianchi iniziali e finali degli scalari tra virgolette su più righe
  • 0bdf8ee: [ExpressionLanguage] corretto il livello di annidamento dei ternari concatenati
  • eced0f6: [ExpressionLanguage] limitare la profondità dell'albero dei nodi analizzato
  • 2f69ab0: [ExpressionLanguage] corrette le discrepanze tra espressioni valutate e compilate
  • c0c4229: [DependencyInjection] rendere riproducibili gli id dei service locator
  • 8e46cef: [TwigBundle] ordinare i template elencati da TemplateIterator
  • 1ea8278: [DependencyInjection] rendere gli id dei servizi anonimi indipendenti dalla directory del progetto

Changelog 7.4:

  • 2bd517c: [HttpFoundation] inviare l'header Incremental RFC 10036 da EventStreamResponse
  • b518954: [Runtime] corretta la perdita di global del server nel test del worker FrankenPHP
  • 26b3c90: [ExpressionLanguage] non riutilizzare un'espressione analizzata con altri flag
  • a2ca9b4: [Validator] considerare una stringa vuota come valida in Week
  • bd1a782: [FrameworkBundle] testare i meta file scritti dal cache warmer di JsonStreamer in modalità debug

Changelog 8.1:

  • 734ce68: [Console] corretti gli argomenti e le opzioni variadiche tipizzate con un backed enum, un uid o una data
  • 457d278: [Form] mantenere selezionabile il placeholder di un ChoiceType obbligatorio quando un form padre è opzionale
  • 9937a54: [FrameworkBundle] rendere lazy il servizio controller.expression_language
  • 1072e56: [VarExporter] corretti gli snapshot di DeepCloner modificati da scritture successive su un ArrayObject
  • e3b770e: [Messenger] non trattare i fallimenti di ack come fallimenti di gestione
  • 194b95e: [FrameworkBundle] iniettare il clock nei validator di confronto e di intervallo
  • f4899d5: [Tui] corretto il testo che termina con UTF-8 non valido e che misurava 0 colonne o veniva svuotato
  • 5feee05: [HttpKernel] consentire l'uso di #[Serialize] sulle classi controller
  • f8b2ffc: [JsonStreamer] mantenere le risorse streamable per i pass del compiler che girano dopo StreamablePass

Changelog 8.2:

  • e0d18eb: [KeyManagement] limitare le letture composite ai membri configurati
  • 273e48b: [KeyManagement] fissare le versioni delle chiavi Azure in scrittura
  • 859020c: [KeyManagement] aggiunto il bridge KMIP
  • 686b834: [Security] inviare RateLimitExceededEvent da LoginThrottlingListener
  • 3173408: [HttpFoundation, HttpKernel] inoltrare le risposte incrementali senza bufferizzarle in HttpClientKernel
  • b0125f6: [Console] supportare liste di backed enum in #[Argument] e #[Option]
  • 8a493a7: [Config] rinominato NodeDefinition::inlineEnvVars() in resolvesAtCompileTime()
  • 95ca94b: [Security, SecurityBundle] consentire a #[IsGranted] di votare sugli argomenti di #[MapRequestPayload]
  • c42f004: [FrameworkBundle, HttpKernel] fare in modo che #[RateLimit] rifiuti le richieste prima di risolvere gli argomenti del controller
  • 95c7e93: [HttpKernel] consentire di impostare una condizione per l'applicazione dell'attributo #[RateLimit]
  • 35de7c5: [ExpressionLanguage, FrameworkBundle, HttpKernel, Security, SecurityBundle] compilare le espressioni durante il warmup della cache
  • 9373c9a: [Messenger] consentire di specificare binding aggiuntivi per le code AMQP
  • 5eab3e2: [HttpKernel] lanciare un'eccezione quando il tag expression_language.compiled è applicato a un servizio che non è un'expression language
  • 03922e1: [ExpressionLanguage] aggiunto ConstantFunctionProvider e deprecati constant() ed enum() senza restrizioni
  • c796481: [Messenger] inviare i batch con i transport Redis, MongoDB, AMPHP SQL e AMQP, e tramite l'outbox
  • 1997d84: [ExpressionLanguage] riutilizzare le espressioni analizzate invece di recuperarle dal cache pool a ogni valutazione
  • 139d67a: [WebProfilerBundle] saltare il log del link al profiler quando le route del profiler non sono caricate
  • 2bb7fc8: [HttpFoundation] documentare Request::getETags() come list<string>
  • 39a6508: [Workflow] aggiunto l'argomento $context a WorkflowInterface::getMarking()
  • 7ff6f5f: [DependencyInjection] consentire a un servizio di dichiarare uno dei suoi metodi come servizio
  • 73cdaa6: [Workflow] consentire di definire i workflow con gli attributi PHP
  • 6001aa3: [HttpClient] aggiunto RecorderHttpClient per registrare e riprodurre gli scambi HTTP
  • 1de136d: [Messenger] aggiunto InteropSerializer per scambiare messaggi con un'altra applicazione
  • 5ea1992: [TypeInfo] aggiunto Type::getMismatches() per indicare dove e perché un valore non è accettato
  • 6f9f3e7: [FrameworkBundle, HttpKernel, SecurityBundle, Workflow] deprecato ExpressionCacheWarmer e far fallire il warmup sulle espressioni elencate non valide
  • 409def4: [Scheduler] aggiunta la configurazione schedules per rendere uno schedule stateful o bloccato
  • 33d4f2b: [Messenger] aggiunto WorkerRestarter e consentito a messenger:stop-workers di fermare solo i worker di alcuni transport
  • d8b2519: [DoctrineBridge, Serializer] denormalizzare nella classe di collection Doctrine dichiarata
  • e786255: [FrameworkBundle, HttpFoundation] deprecato il salvataggio degli attributi di sessione modificati senza chiamare set()
  • 42be462: [HttpKernel, Lock] aggiunto l'attributo #[Lock] per rifiutare o ritardare le richieste concorrenti
  • d586d6e: [Messenger] consentire di configurare la lock factory del middleware di deduplicazione
  • 4cf7e95: [FrameworkBundle, SecurityBundle] dichiarare i value resolver che devono girare prima di EntityValueResolver
  • 7387fd4: [DoctrineBridge] ordinare gli event listener con vincoli before/after
  • c3830aa: [Messenger] ordinare gli handler con vincoli before/after
  • d32d757: [Clock] velocizzare DatePoint e MonotonicClock
  • 31ed3bf: [DependencyInjection] registrare nei log le variabili d'ambiente risolte durante la compilazione del container
  • 90fec98: [Security, SecurityBundle] ordinare i listener del firewall con vincoli before/after
  • e590ce0: [Workflow] aggiunto #[Place(initial: true)] per definire la marking iniziale
  • c617a98: [Messenger] conservare i sender stamp dei messaggi memorizzati in un outbox
  • dd1d713: [FrameworkBundle, HttpKernel, SecurityBundle, Workflow] aggiunto il comando lint:expressions
  • 9971ab4: [Messenger] inoltrare solo i messaggi ricevuti dall'outbox della loro destinazione
  • 9d9fec6: [HttpFoundation, HttpKernel] trattare il 308 come il 301 ai fini della cache
  • 59e7da2: [Messenger] non attribuire i fallimenti di settlement al messaggio inviato
  • a75608c: [MonologBridge] filtrare per canale i log scritti sulla console
  • 6183043: [FrameworkBundle, HttpKernel] aggiunto LockValueResolver per iniettare il lock acquisito dall'attributo Lock
  • b5e7742: [ExpressionLanguage] corretto il fallback di CompiledExpressionLanguage
  • c0d7f14: [Security] registrare a livello debug gli access token rifiutati da OidcTokenHandler
  • d4f0e27: [Workflow] consentire di estendere gli attributi AsWorkflow, Place e Transition
  • b419636: [ExpressionLanguage] aggiunta ExceptionInterface
  • b741346: [Config] rendere riproducibili i meta file della cache
  • e42875f: [Config, TwigBundle] evitare traversal ridondanti delle directory durante la scoperta dei template e il controllo delle risorse
  • 4b402cd: [Console] mandare a capo i messaggi di eccezione sui confini di parola

Changelog 3.x:

  • b9b03f5: [Toolkit] corretto il crash del linter dei kit con Twig 4
  • 019871a: [Toolkit] corretti gli snapshot del drawer rotti da twig-tailwind-extra 1.5.0
  • 443dc9f: [Toolkit, Shadcn] aggiunta la recipe toast
  • 243862c: [CalendarLink] corretta il rilevamento UTC per VTIMEZONE
  • 5e9614c: [Notify] aggiunto il supporto per MercureBundle ^0.5 e Mercure ^0.8
  • 14b9ca5: [Toolkit, Shadcn] corretto l'aria-label del chiamante che veniva ignorato su pagination, breadcrumb e questionnaire
  • 262c26b: [Notify] aggiunto il supporto per MercureBundle ^0.6
  • f14d1f6: [Turbo] aggiunto il supporto per MercureBundle ^0.6 e Mercure ^0.9
  • b013fd9: [TwigComponent] saltare gli hook di mount sui componenti anonimi quando nessuno ascolta gli eventi di mount
  • 697f5de: [TwigComponent] trovare il template host dei blocchi embedded senza scansionare lo stack delle chiamate
  • b51158e: [Icons] mettere in cache l'HTML renderizzato delle icone ripetute in IconRenderer
  • 31d53a2: [TwigComponent] evitare di copiare le variabili di render quando nessuno ascolta PreRenderEvent
  • defb393: [LiveComponent] ordinare la mappa dei template scritta dal cache warmer
  • cb6101b: [LiveComponent] azzerare i contatori degli id deterministici tra le richieste
  • 7da41b9: [Image] aggiunto il supporto per KeyCDN Secure Token
  • c7050de: [Toolkit, Shadcn] corretta la larghezza dello sheet e la transizione di uscita dell'overlay

Changelog:

  • 3f38535: [Platform] verificare che ogni tipo di risultato sia classificato per il contenuto dell'assistant
  • 64bbcde: [Agent] aggiunte le costanti delle fasi di Progress
  • cf37f28: [Platform, Generic] contare gli snapshot di utilizzo dello streaming una volta per richiesta
  • 9a78e47: [Platform] consentire item e proprietà annidati nel tipo JsonSchema
  • 55278a8: [Platform] usare impacts invece di carbon per Albert

Symfony CLI è uno strumento irrinunciabile quando si sviluppano applicazioni Symfony sulla propria macchina locale. Include il Symfony Local Server, il modo migliore per eseguire applicazioni Symfony in locale. Questa settimana Symfony CLI ha rilasciato le nuove versioni 5.22.0 e 5.21.0 con le seguenti modifiche:

  • Seguire i log dell'applicazione quando il percorso del progetto contiene caratteri glob (@fabpot)
  • Recuperare su richiesta le versioni dei servizi Upsun e le estensioni PHP (@fabpot)
  • Rimuovere le estensioni PHP duplicate dalla configurazione cloud generata (@fabpot)
  • Riprodurre solo l'ultimo file di log dell'applicazione e seguire gli altri man mano che vengono scritti (@fabpot)
  • Preferire la mappatura TCP quando una porta Docker è pubblicata anche via UDP (@fabpot)
  • Confrontare semanticamente le versioni dei servizi Docker Compose (@fabpot)
  • Consentire ai file .env di sovrascrivere le variabili caricate dai file .env da un processo padre (@fabpot)
  • Risolvere i percorsi relativi monitorati a partire dalla directory del progetto in server:status (@fabpot)
  • Accettare di nuovo gli indirizzi IPv6 tra parentesi per il flag --listen-ip del server (@fabpot)
  • Consentire di nuovo alle variabili calcolate da Docker o dai tunnel di prevalere su quelle esportate (@fabpot)
  • Non registrare i link di preload come errori quando la connessione non supporta il push (@fabpot)
  • Rilevare la directory di scansione ini dal binario PHP effettivamente eseguito (@fabpot)
  • Aggiungere un separatore finale solo alle directory monitorate in server:status (@fabpot)
  • Caricare di nuovo il php.ini del progetto nei worker PHP del web server locale (@fabpot)
  • Usare t.Setenv nel test dei servizi Docker Compose (@fabpot)
  • De-escapare la directory di scansione ini riportata dall'output HTML di phpinfo di php-cgi (@fabpot)
  • Renderizzare i template di configurazione cloud prima di scriverli, così un errore non lascia mai un file troncato (@fabpot)
  • Rispecchiare Symfony Dotenv per un APP_ENV esportato vuoto e per l'ambiente locale (@fabpot)
  • Mappare le versioni dei servizi Docker Compose su una versione supportata da Upsun invece di mantenere quelle ritirate o sconosciute (@fabpot)
  • Non caricare nulla dai file .env quando il progetto non ne ha, invece di leggere la directory corrente e forzare APP_ENV=dev (@fabpot)
  • Elencare APP_ENV in SYMFONY_DOTENV_VARS quando è caricato dai file .env, così le esecuzioni annidate non lo ereditano (@fabpot)
  • Consentire ai file .env di sovrascrivere le variabili caricate dai file .env da un processo padre durante la ricerca di una singola variabile (@fabpot)
  • Tenere APP_ENV fuori da SYMFONY_DOTENV_VARS, così --env e l'APP_ENV forzato da PHPUnit prevalgono sui file .env (@fabpot)
  • Identificare la CLI con un header User-Agent quando si interroga il meta registry di Upsun (@fabpot)
  • Recuperare su richiesta le versioni dei servizi Upsun e le estensioni PHP dal meta registry di Upsun (@fabpot)
  • Rimuovere da una SYMFONY_DOTENV_VARS ereditata le variabili calcolate da Docker o dai tunnel, così Dotenv non può sostituirle (@fabpot)
  • Documentare con precisione come il caricamento dei .env differisce da Symfony Dotenv e interagisce con Docker e PHPUnit (@fabpot)
  • Documentare come la CLI costruisce l'ambiente dei processi PHP (@fabpot)
  • Rilevare la directory di scansione ini dal binario PHP effettivamente eseguito invece che da quello della CLI (@fabpot)
  • Confrontare semanticamente le versioni dei servizi Docker Compose invece che come stringhe (@fabpot)
  • Aggiungere un messaggio di errore utile quando la directory home non è scrivibile (@crydotsnake, @fabpot)
  • fix: consentire alle variabili d'ambiente impostate a livello di sistema di prevalere (@shyim)
  • Seguire tutti i file di log dell'applicazione invece di solo quello di dev (@fabpot)
  • Pubblicizzare configurazione, worker e log del server locale all'avvio del server (@crydotsnake, @fabpot)
  • Aggiungere un proxy opt-in che serve l'hub Mercure Docker sull'origine del web server (@fabpot)
  • Aggiungere il supporto di prima classe per Meilisearch al rilevamento dei servizi Docker (@fabpot)
  • Inviare un header Server dal web server locale e dal proxy (@fabpot)
  • Aggiungere il supporto per beanstalkd al rilevamento dei servizi Docker (@jmsche)
  • Rilevare Mailtrap Local come mail catcher (@tsokolovs, @fabpot)
  • Mettere tra virgolette i valori in var:export --multiline quando necessario (@nussjustin-hmmh, @fabpot)
  • Consentire a .env.local e ai file .env specifici dell'ambiente di sovrascrivere i valori di .env (@fabpot)
  • Consentire alle variabili d'ambiente esportate di avere la precedenza sui file .env (@shyim, @nussjustin-hmmh, @fabpot)
  • Rispettare il SERVER_NAME di Mercure quando si espone l'URL dell'hub Mercure (@fabpot)
  • Correggere i symlink del binario PHP che fallivano con file exists quando il percorso di destinazione contiene un symlink (@fabpot)
  • Passare la shell di completamento al completion di Symfony Console invece di affidarsi a SHELL (@fabpot)
  • Rispettare default_connection di Doctrine durante la lettura della versione del server di database (@fabpot)
  • Consentire indirizzi IPv6 per il flag --listen-ip del server (@fabpot)
  • Analizzare i timestamp dei log di Symfony con un offset di fuso orario negativo (@fabpot)
  • Inizializzare la nuova directory di configurazione per memorizzare il binario invece di quella legacy (@crydotsnake)
  • Assicurarsi che il log dell'applicazione usi il fuso orario locale (@crydotsnake)
  • Usare PidFile.Command() per mostrare il comando del worker (@fabpot)
  • Rimuovere il test del mail catcher che non esercita il rilevamento (@fabpot)
  • Mettere tra virgolette i valori che ne hanno bisogno in var:export --multiline invece di aggiungere un flag --quote (@fabpot)
  • Verificare in anticipo le credenziali di release e recuperare i pacchetti (@fabpot)
  • Preferire le variabili d'ambiente esistenti ai valori dei file .env (@nussjustin-hmmh)
  • Indicare la directory della CLI invece della directory home nell'errore sulla directory temporanea (@fabpot)
  • Consentire alle variabili esportate di sovrascrivere l'ambiente del progetto in lsp:check (@fabpot)
  • Tenere le variabili esportate fuori da SYMFONY_DOTENV_VARS, anche quando sono vuote (@fabpot)
  • Rilevare Mailtrap Local come mail catcher (@tsokolovs)
  • Inizializzare la nuova directory di configurazione per memorizzare il binario invece di quella legacy (@crydotsnake)
  • Assicurarsi che il log dell'applicazione usi il fuso orario locale (@crydotsnake)
  • Pubblicizzare configurazione, worker e log del server locale all'avvio del server (@crydotsnake)
  • Aggiungere un messaggio di errore utile quando la directory home non è scrivibile (@crydotsnake)
  • Aggiungere un flag per mettere tra virgolette le variabili esportate in var:export (@nussjustin-hmmh)

Queste sono alcune delle offerte di lavoro Symfony più recenti:

  • Symfony Developer presso Steward
    Part-time / Temporaneo - $8,700 – $13,000 / mese
    Full remote
    Visualizza i dettagli

Puoi pubblicare gratuitamente un'offerta di lavoro Symfony su symfony.com.

SymfonyCasts è il modo ufficiale per imparare Symfony. Scegli un percorso per un cammino guidato attraverso oltre 100 corsi video su Symfony, PHP e JavaScript.

Questa settimana SymfonyCasts ha pubblicato i seguenti aggiornamenti:

Condividi su: LinkedIn

Altri articoli recenti