Symfony 6.4.0-BETA1 has just been released. Here is the list of the most important changes since 6.3:

  • feature #51847 [AssetMapper] Allowing for files to be written to some non-local location (@weaverryan)
  • feature #52079 [HttpKernel] Add parameters kernel.runtime_mode and kernel.runtime_mode.*, all set from env var APP_RUNTIME_MODE (@nicolas-grekas)
  • feature #51348 [FrameworkBundle][Validator] Allow implementing validation groups provider outside DTOs (Yonel Ceruto)
  • feature #51577 [Notifier][Novu] Implement overrides (@wouter-toppy)
  • feature #51211 [Workflow] List place and transition listeners in profiler (@lyrixx)
  • feature #51220 [Workflow] Add a TraceableWorkflow (@lyrixx)
  • feature #52120 [AssetMapper] Split ImportmapManager into 2 (@weaverryan)
  • feature #51849 [AssetMapper] Warn of missing or incompat dependencies (@weaverryan)
  • feature #52032 [FrameworkBundle][Routing][Translation][Workflow] Move some compiler passes from FrameworkBundle to components (@fancyweb)
  • feature #52166 [HtmlSanitizer] Add support for sanitizing unlimited length of HTML document (@lyrixx)
  • feature #48095 [Messenger] [Sqs] Add AddFifoStamp middleware (@tyx)
  • feature #52160 [DoctrineBridge] Change argument $lastUsed of DoctrineTokenProvider::updateToken() to accept DateTimeInterface (@nicolas-grekas)
  • feature #52140 [Translation] Add argument $buildDir to DataCollectorTranslator::warmUp() (@nicolas-grekas)
  • feature #52047 [HttpFoundation][Runtime] Add $flush parameter to Response::send() (@fancyweb)
  • feature #51470 [FrameworkBundle][Serializer] Deprecate annotations (@alexandre-daubois)
  • feature #51483 [FrameworkBundle][Routing] Deprecate annotations (@alexandre-daubois)
  • feature #47416 [Console][FrameworkBundle][HttpKernel][WebProfilerBundle] Enable profiling commands (@HeahDude)
  • feature #50391 [FrameworkBundle][HttpKernel] Introduce $buildDir argument to WarmableInterface::warmup to warm read-only artefacts in build_dir (@Okhoshi)
  • feature #52087 [Scheduler] Add FailureEvent (@alli83)
  • feature #51828 [AssetMapper] Put importmap in polyfill so it can be hosted locally easily (@weaverryan)
  • feature #52024 [AssetMapper] Add a "package specifier" to importmap in case import name != package+path (@weaverryan)
  • feature #50734 [ErrorHandler] Improve fileLinkFormat handling (@nlemoine)
  • feature #52002 [HttpFoundation] Cookies Having Independent Partitioned State (CHIPS) (@fabricecw)
  • feature #51805 [Scheduler] pre_run and post_run events (@alli83)
  • feature #51926 [Mime] Forbid messages that are generators to be used more than once (@fabpot)
  • feature #50946 [Routing][SecurityBundle] Add LogoutRouteLoader (@MatTheCat)
  • feature #52038 [Console] Dispatch ConsoleTerminateEvent when exiting on signal (@HeahDude)
  • feature #49893 [Serializer] Add XmlEncoder::CDATA_WRAPPING context option (@AndoniLarz)
  • feature #50877 [Finder] Add early directory prunning filter support (@mvorisek)
  • feature #51829 [AssetMapper] Automatically preload CSS files if WebLink available (@weaverryan)
  • feature #51011 [FrameworkBundle] Add parameters deprecations to the output of debug:container command (@HeahDude)
  • feature #51888 [WebProfiler] Profiler improvements / extract Font from stylesheet (@smnandre)
  • feature #51058 [FrameworkBundle] Add --exclude option to the cache:pool:clear command (@MatTheCat)
  • feature #51845 [AssetMapper] Add outdated command (Maelan LE BORGNE)
  • feature #51976 [Workflow] Revert deprecation about Registry (@lyrixx)
  • feature #50537 [Console] Add placeholders to ProgressBar for exact times (@maxbeckers)
  • feature #51717 [Notifier] [Telegram] Extend options for location, document, audio, video, venue, photo, animation, sticker & contact (@igrizzli)
  • feature #49044 [Messenger] Mention the transport which failed during the setup command (@thePanz)
  • feature #51786 [AssetMapper] Always downloading vendor files (@weaverryan)
  • feature #51832 [DependencyInjection] Add #[AutowireIterator] attribute and improve #[AutowireLocator] (@nicolas-grekas, @kbond)
  • feature #50934 [Form] Add duplicate_preferred_choices option to ChoiceType (@arnaud-deabreu)
  • feature #51650 [AssetMapper] Add audit command (@Jean-Beru)
  • feature #51800 [DoctrineBridge] Pass Request to EntityValueResolver's expression (@HypeMC)
  • feature #51848 [Messenger] Resend failed retries back to failure transport (@ro0NL)
  • feature #51811 Add "dev" keyword to symfony/symfony package (@nicolas-grekas)
  • feature #51276 [Notifier] Transport possible to have null (@StaffNowa)
  • feature #50662 [FrameworkBundle] Add HttpClientAssertionsTrait which provide shortcuts to assert HTTP calls was triggered (@welcoMattic)
  • feature #50392 Move UriSigner from HttpKernel to HttpFoundation package (@alexander-schranz)
  • feature #51804 [Security] Make impersonation_path() argument mandatory and add impersonation_url() (@alexandre-daubois)
  • feature #50127 [TwigBridge] Add FormLayoutTestCase class (@ker0x)
  • feature #50030 Add new twig bridge function to generate impersonation path (@PhilETaylor)
  • feature #50109 [FrameworkBundle] Add --show-aliases option to debug:router command (@fancyweb)
  • feature #50141 Allow sending scheduled messages through the slack API (@Insanfly)
  • feature #50321 [TwigBridge] Add AppVariable::getEnabledLocales() (@jmsche)
  • feature #51676 [RateLimiter] Add SlidingWindowLimiter::reserve() (@Jeroeny)
  • feature #51538 [HttpFoundation] Support root-level Generator in StreamedJsonResponse (@Jeroeny)
  • feature #51653 [Messenger] Add WrappedExceptionsInterface for nested exceptions (@Jeroeny)
  • feature #51690 [Mime] Add TemplatedEmail::locale() to set the locale for the email rendering (@alexander-schranz)
  • feature #51525 [Messenger][Scheduler] Add AsCronTask & AsPeriodicTask attributes (@valtzu)
  • feature #51795 [Scheduler] Make debug:scheduler output more useful (@fabpot)
  • feature #51793 [FrameworkBundle] Change BrowserKitAssertionsTrait::getClient() to be protected (@fabpot)
  • feature #44629 [FrameworkBundle] Allow BrowserKit relative URL redirect assert (@julienfalque)
  • feature #51756 [Messenger] RejectRedeliveredMessageException should not be retried (@nikophil)
  • feature #51779 [Serializer] Make ProblemNormalizer give details about Messenger’s ValidationFailedException (@MatTheCat)
  • feature #51772 [WebProfilerBundle] Support ! negation operator in url filter (@SzymonKaminski)
  • feature #51729 [AssetMapper] Allow simple, relative paths in importmap.php (@weaverryan)
  • feature #51697 [PropertyInfo] Make isWriteable() more consistent with isReadable() when checking snake_case properties (@jbtronics)
  • feature #51543 [AssetMapper] Add support for CSS files in the importmap (@weaverryan)
  • feature #51593 [Messenger] Add the --all option to the messenger:failed:remove command (@alexandre-daubois)
  • feature #51542 [Scheduler] Trigger unique messages at runtime (@Jeroeny)
  • feature #51415 [Clock] Add DatePoint: an immutable DateTime implementation with stricter error handling and return types (@nicolas-grekas)
  • feature #51553 [Scheduler] Allow modifying the schedule at runtime and recalculate heap (@Jeroeny)
  • feature #51712 Deprecate Kernel::stripComments() (@alamirault)
  • feature #51687 [Messenger] Add support for multiple Redis Sentinel hosts (@digilist)
  • feature #51153 [Translation] Add --as-tree option to translation:pull command (@syffer)
  • feature #51601 [Mime] Allow to add some headers as a strings (@Oipnet)
  • feature #51684 [Translation] Give current locale to LocaleSwitcher::runWithLocale()'s callback (@alexander-schranz)
  • feature #51651 [Scheduler] Fix stateful scheduler (@valtzu)
  • feature #51638 [FrameworkBundle] [Test] add token attributes in KernelBrowser::loginUser() (@Valmonzo)
  • feature #51558 [HttpClient] Enable using EventSourceHttpClient::connect() for both GET and POST (@wivaku)
  • feature #51476 [Serializer] Allow Context to target classes (@mtarld)
  • feature #50438 [Validator] Add is_valid function to Expression constraint (@verdet23, @DEVizzent)
  • feature #51585 [Security] Add badge resolution to profiler (@Jean-Beru)
  • feature #51523 [AssetMapper] Allow specifying packages to update with importmap:update (@jmsche)
  • feature #50705 [Mailer][Webhook] Add Sendgrid webhook support (@WoutervanderLoopNL)
  • feature #51450 [Mailer] [Smtp] Add DSN param peer_fingerprint for fingerprint verification (@xdavidwu)
  • feature #51484 [Workflow] deprecate GuardEvent::getContext method (@hhamon)
  • feature #51351 [AssetMapper] Add command to download missing downloaded packages (@jmsche)
  • feature #51454 [Validator] Un-deprecate passing an annotation reader to AnnotationLoader (@derrabus)
  • feature #51434 [Security] [Throttling] Hide username and client ip in logs (@Spomky)
  • feature #51425 [FrameworkBundle][Validator] Deprecate annotation occurrences (@alexandre-daubois)
  • feature #51392 [DependencyInjection] add #[AutowireLocator] attribute (@kbond)
  • feature #51365 [Clock] Add $modifier argument to the now() helper (@nicolas-grekas)
  • feature #51327 [FrameworkBundle] Add AbstractController::renderBlock() and renderBlockView() (@nicolas-grekas)
  • feature #51357 [FrameworkBundle] Deprecate not setting some options (uid, validation) (@Jean-Beru)
  • feature #51325 [FrameworkBundle] Deprecate not setting some options (@Jean-Beru)
  • feature #51412 [Clock] Throw DateMalformedStringException/DateInvalidTimeZoneException when appropriate (@nicolas-grekas)
  • feature #51368 [DomCrawler] Added argument $default to method Crawler::attr() (@Rastishka)
  • feature #51315 [Notifier][Webhook] Add Vonage support (@smnandre)
  • feature #51349 [Notifier] Add GoIP bridge (@ahmedghanem00)
  • feature #51332 [SecurityBundle] Deprecate the require_previous_session config option (@alamirault)
  • feature #51284 [FrameworkBundle][HttpKernel][MonologBridge] Revisit wiring of debug loggers (@nicolas-grekas)
  • feature #50306 [DomCrawler][FrameworkBundle] Add assertAnySelectorText* (@SVillette)
  • feature #51263 [Scheduler] Add --all to debug:schedule (@fabpot)
  • feature #50939 [SecurityBundle] Add $badges argument to Security::login (@MatTheCat)
  • feature #50951 [FrameworkBundle] Support APP_BUILD_DIR (@ro0NL)
  • feature #51264 [RemoteEvent][Webhook] Add Brevo support (@blaugueux)
  • feature #50502 [RemoteEvent][Webhook] Add Mailjet support (@blaugueux)
  • feature #51250 Remove remaining experimental classes (@fabpot)
  • feature #51249 [RemoteEvent] Mark component as non experimental (@fabpot)
  • feature #51248 [Webhook] Mark component as non experimental (@fabpot)
  • feature #51247 [AssetMapper] Mark component as non experimental (@fabpot)
  • feature #51246 [Scheduler] Mark component as non experimental (@fabpot)
  • feature #51245 [Scheduler] Only use toString if defined for message (@fabpot)
  • feature #51244 [Scheduler] Add --date to schedule:debug (@fabpot)
  • feature #51210 [Workflow] Add PHP attributes to register listeners and guards (@lyrixx)
  • feature #48485 [Process] Introducing a new PhpSubprocess handler (@Toflar)
  • feature #51215 [FrameworkBundle] Enable json_decode_detailed_errors in dev by default (@ostrolucky)
  • feature #51004 [HttpKernel] Support backed enums in #[MapQueryParameter] (@andersmateusz)
  • feature #51230 [Scheduler] add ScheduledStamp to RedispatchMessage (@kbond)
  • feature #51218 [Workflow] Support multiline descriptions in PlantUML (@valtzu)
  • feature #51073 [Intl] Add support for ISO 3166-1 numeric codes (@benr77)
  • feature #51191 [Mime] Update mimetypes (@fabpot)
  • feature #47422 [Process] Support using Process::findExecutable() independently of open_basedir (@BlackbitDevs)
  • feature #48907 [Validator] Validate time without seconds (@xepozz)
  • feature #51204 [Workflow] Add a profiler (@lyrixx)
  • feature #47715 [Form] Removing self-closing slash from <input> (@ThomasLandauer)
  • feature #50212 [FrameworkBundle][Serializer] Add TranslatableNormalizer (@Jean-Beru)
  • feature #50767 [HttpKernel] RequestPayloadValueResolver Add support for custom http status code (@zim32)
  • feature #51172 [Serializer] Add support for seld/jsonlint (@ostrolucky)
  • feature #49231 [Translation] Phrase translation provider (@wickedOne)
  • feature #50974 [Workflow] Add support for storing the marking in a property (@lyrixx)
  • feature #51092 [Scheduler] make ScheduledStamp "send-able" (@kbond)
  • feature #51197 [PsrHttpMessageBridge] Support php-http/discovery for auto-detecting PSR-17 factories (@derrabus)
  • feature #48841 [BrowserKit] Add argument $serverParameters to click() and clickLink() (@syl20b)
  • feature #49594 [Serializer] Groups annotation/attribute on class (@Brajk19)
  • feature #50879 [Notifier] support local development for sns by adding sslmode option (@Ferror)
  • feature #51152 [Scheduler] Add AbstractTriggerDecorator (@kbond)
  • feature #49814 [Console][Messenger] add RunCommandMessage and RunCommandMessageHandler (@kbond)
  • feature #50978 [Messenger] Allow accessing all options on a handler descriptor (@ruudk)
  • feature #50911 [HttpKernel] Enhance exception if possible (@lyrixx)
  • feature #50136 [Notifier] [SpotHit] Support smslong and smslongnbr API parameters (@camillebaronnet)
  • feature #50907 [Validator] Update Type constraint, add number, finite-float and finite-number validations (@guillaume-a)
  • feature #51130 [VarDumper] Dump uninitialized properties (@nicolas-grekas)
  • feature #51144 [Templating] deprecate the component (@kbond)
  • feature #51014 [Mailer] Add Scaleway bridge (@MrMicky-FR)
  • feature #51167 [PsrHttpMessageBridge] Remove ArgumentValueResolverInterface from PsrServerRequestResolver (@derrabus)
  • feature #51100 [PsrHttpMessageBridge] Import the bridge into the monorepo (@fabpot, @dunglas, @KorvinSzanto, @xabbuh, @aimeos, @ahundiak, @Danielss89, @rougin, @csunolgomez, Jérôme Parmentier, @mtibben, @Nyholm, @ajgarlag, @uphlewis, @samnela, @grachevko, @nicolas-grekas, @tinyroy, @danizord, Daniel Degasperi, @rbaarsma, @Ekman, @4rthem, @derrabus, @mleczakm, @iluuu1994, @Tobion, @chalasr, @lemon-juice, @franmomu, @cidosx, @erikn69, @AurelienPillevesse)
  • feature #49815 [HttpClient][Messenger] add PingWebhookMessage and PingWebhookMessageHandler (@kbond)
  • feature #49813 [Messenger][Process] add RunProcessMessage and RunProcessMessageHandler (@kbond)
  • feature #51148 [FrameworkBundle] Simplify marking store configuration (@nicolas-grekas)
  • feature #51128 [SecurityBundle] Allow an array of pattern in firewall configuration (@lyrixx, @chalasr)
  • feature #50931 [Form] Support Translatable Enum (@Seb33300)
  • feature #49358 [Routing] Deprecate annotations in favor of attributes (@derrabus)
  • feature #50982 [Validator] Deprecate annotations in favor of attributes (@derrabus)
  • feature #50983 [Serializer] Deprecate annotations in favor of attributes (@derrabus)
  • feature #51043 [Form] Deprecate FormEvent::setData() for events that do not allow it (@HeahDude)
  • feature #50888 [FrameworkBundle] Deprecate doctrine/annotations integration (@derrabus)
  • feature #50997 [Messenger] Deprecate StopWorkerOnSignalsListener (@HypeMC)
  • feature #50290 [Security] Make PersistentToken immutable and tell TokenProviderInterface::updateToken() implementations should accept DateTimeInterface (@nicolas-grekas)
  • feature #50883 [TwigBundle] Allow omitting the autoescape_service_method option when autoescape_service is set to an invokable service id (@nicolas-grekas)
  • feature #50718 [DependencyInjection] Improve reporting named autowiring aliases (@nicolas-grekas)
  • feature #50295 [PropertyAccess] Auto-cast from/to DateTime/Immutable when appropriate (@nicolas-grekas)
  • feature #50420 [Console] add support for catching \Throwable errors (@lyrixx)
  • feature #50148 [Mailer] Add X-Infobip-Track header to be able to disable tracking (@ndousson)
  • feature #50200 [Mailer] Adds assertEmailSubjectContains and assertEmailSubjectNotContains methods (@johanadivare)
  • feature #50302 [Mailer] New Brevo mailer bridge (formerly Sendinblue) (@PEtanguy)
  • feature #50296 [Notifier] Add Brevo bridge (formerly Sendinblue) (@PEtanguy)
  • feature #50842 Add missing return types to magic methods (@wouterj)
  • feature #50868 [SecurityBundle] Deprecate Security::* consts and other cleanups (@nicolas-grekas)
  • feature #50770 [TwigBridge] Allow to change element for form_help block (@seb-jean)
  • feature #50814 [HttpClient] Allow custom working directory in TestHttpServer (@ro0NL)
  • feature #46426 [Form] deprecate using the date and time types with date objects with not-matching timezones (@xabbuh)
  • feature #50791 [DependencyInjection] Add defined prefix for env var processor (@GaryPEGEOT)
  • feature #50754 [HttpKernel] when configuring the container add services_{env} with php extension (@helyakin)
  • feature #50425 [Validator] Allow single constraint to be passed to the constraints option of the When constraint (@alexandre-daubois)
  • feature #50396 [Validator] Allow single integer for the versions option of the Uuid constraint (@alexandre-daubois)
  • feature #50621 [FrameworkBundle][Workflow] Add metadata dumping support for GraphvizDumper (@Louis-Proffit)
  • feature #50170 [Notifier] Added redlink notifier (@plotkabytes)
  • feature #50615 [DependencyInjection] Deprecate ContainerAwareInterface, ContainerAwareTrait and ContainerAwareLoader (@alexandre-daubois)
  • feature #50084 [Routing] Add FQCN and FQCN::method aliases when applicable (@fancyweb)
  • feature #50691 [Console] Aligned multiline text in vertical table (@jaytaph)
  • feature #50131 [Notifier] add Ntfy bridge (@mikaelkael)
  • feature #50663 [Console] Add SignalMap to map signal value to its name (@lyrixx)
  • feature #50414 [Notifier] Add Novu bridge (@wouter-toppy)
  • feature #50240 [HttpClient] Add max_retries option to RetryableHttpClient (@danielburger1337)
  • feature #50572 [Scheduler] Allow setting cron expression next run date timezone (@danielburger1337)
  • feature #50579 [DoctrineBridge] Deprecate using the old DBAL logger system (@derrabus)
  • feature #50335 [HttpKernel] Add optional $className param to ControllerEvent::getAttributes() (@HypeMC)

Want to upgrade to this new release? Because Symfony protects backwards-compatibility very closely, this should be quite easy. Use SymfonyInsight upgrade reports to detect the code you will need to change in your project and read our upgrade documentation to learn more.

Want to be notified whenever a new Symfony release is published? Or when a version is not maintained anymore? Or only when a security issue is fixed? Consider subscribing to the Symfony Roadmap Notifications.

Published in #Releases