Symfony 5.4.0-BETA1 has just been released. Here is a list of the most important changes:

  • feature #43916 [PropertyInfo] Support the list pseudo-type (@derrabus)
  • feature #43850 Add completion for DebugConfig name and path arguments (@eclairia, @Adrien Jourdier)
  • feature #43838 feat: add completion for DebugAutowiring search argument (@eclairia, @Adrien Jourdier)
  • feature #38464 [Routing] Add support for aliasing routes (@Lctrs)
  • feature #43923 [Console] Open CompleteCommand for custom outputs (@wouterj)
  • feature #43663 [Messenger] Add command completion for failed messages (@scyzoryck)
  • feature #43857 [Framework] Add completion to debug:container (@GromNaN)
  • feature #43891 [Messenger] Add completion to command messenger:consume (@GromNaN)
  • feature #42471 Add generic types to traversable implementations (@derrabus)
  • feature #43898 [Security] Make the abstract Voter class implement CacheableVoterInterface (@javiereguiluz)
  • feature #43848 [FrameworkBundle] Add completion for workflow:dump (@StaffNowa)
  • feature #43837 [Finder] Add .gitignore nested negated patterns support (@julienfalque)
  • feature #43754 Determine attribute or annotation type for directories (@cinamo)
  • feature #43846 Add completion for debug:twig (@StaffNowa)
  • feature #43138 [FrameworkBundle][HttpKernel] Add the ability to enable the profiler using a parameter (@dunglas)
  • feature #40457 [PropertyInfo] Add PhpStanExtractor (@Korbeil)
  • feature #40262 [DoctrineBridge] Param as connection in *.event_subscriber/listener tags (@wbloszyk)
  • feature #43354 [Messenger] allow processing messages in batches (@nicolas-grekas)
  • feature #43835 [SecurityBundle] Deprecate not configuring explicitly a provider for custom_authenticators when there is more than one registered provider (@lyrixx)
  • feature #43598 [Console] add suggestions for debug commands: firewall, form, messenger, router (@IonBazan)
  • feature #41993 [Security] Prevent FormLoginAuthenticator from responding to requests that should be handled by JsonLoginAuthenticator (@abunch)
  • feature #43751 [WebProfilerBundle] Add a "preview" tab in mailer profiler for HTML email (@lyrixx)
  • feature #43644 [FrameworkBundle] Add completion to debug:translation command (@alexandre-daubois)
  • feature #43653 [PasswordHasher] Add autocompletion for security commands (@noniagriconomie)
  • feature #43676 [FrameworkBundle] Add completion feature on translation:update command (@stephenkhoo)
  • feature #43672 [Translation] Add completion feature on translation pull and push commands (@welcoMattic)
  • feature #43060 [RateLimiter] Add support for long intervals (months and years) (@alexandre-daubois)
  • feature #42177 [Security][SecurityBundle] Implement ADM strategies as dedicated classes (@derrabus)
  • feature #43804 [DependencyInjection][FrameworkBundle][SecurityBundle][TwigBundle] Deprecate Composer 1 (@derrabus)
  • feature #43796 [Filesystem] Add third argument $lockFile to Filesystem::appendToFile() (@fwolfsjaeger)
  • feature #42414 [Notifier] Add Expo bridge (@zairigimad)
  • feature #43066 [Security] Cache voters that will always abstain (@jderusse)
  • feature #43758 [FrameworkBundle] Rename translation:update to translation:extract (@welcoMattic)
  • feature #41414 Support statusCode default param when loading template directly via route (@dayallnash)
  • feature #42238 [DependencyInjection] Add SubscribedService attribute, deprecate current ServiceSubscriberTrait usage (@kbond)
  • feature #38542 [FrameworkBundle][Serializer] Allow serializer default context configuration (@soyuka)
  • feature #43755 [Dotenv] Add $overrideExistingVars to bootEnv() and loadEnv() and dotenv_overload to SymfonyRuntime (@fancyweb)
  • feature #43671 add ResponseIsUnprocessable (@garak)
  • feature #43682 [FrameworkBundle] Add completion for config:dump-reference (@StaffNowa)
  • feature #43588 [Messenger] Autoconfigurable attributes (@alirezamirsepassi)
  • feature #43593 [Validator] Add CidrValidator to allow validation of CIDR notations (@popsorin)
  • feature #43683 [VarDumper] Add completion to server:dump command (@alexandre-daubois)
  • feature #43677 [RateLimiter] bug #42194 fix: sliding window policy to use microtime (@jlekowski)
  • feature #43679 [VarDumper] Add support for Fiber (@lyrixx)
  • feature #43680 Add suggestions for the option 'format' of lints commands: twig, yaml and xliff (@makraz)
  • feature #43621 Add completion for cache:pool:clear and cache:pool:delete commands (@andyexeter)
  • feature #43639 [Uid] Allow use autocompletion (@StaffNowa)
  • feature #43626 [Console] [Framework] Add completion to secrets:set and fix secrets:remove (@GromNaN)
  • feature #43640 [Console] Add completion to messenger:setup-transports command (@Tayfun74)
  • feature #43615 feat: add completion for CompletionCommand "shell" argument (@dkarlovi)
  • feature #43595 [Console] SymfonyStyle enhancements (@kbond)
  • feature #41268 [HttpFoundation] Allow setting session options via DSN (@makraz)
  • feature #43596 [Console] Add completion to help & list commands (@GromNaN)
  • feature #43576 [Messenger] subtract handling time from sleep time in worker (@nicolas-grekas)
  • feature #43386 [DependencyInjection] Extend TaggedIterator and TaggedLocator Attributes with able to specify defaultIndexMethod for #[TaggerIterator] and #[TaggedLocator] (@fractalzombie)
  • feature #42251 [Console] Bash completion integration (@wouterj)
  • feature #39402 [Notifier] Add push channel to notifier (@norkunas)
  • feature #43332 [Lock] Split PdoStore into DoctrineDbalStore (@GromNaN)
  • feature #43362 [Cache] Split PdoAdapter into DoctrineDbalAdapter (@GromNaN)
  • feature #42580 [Console][FrameworkBundle] Add DotenvDebugCommand (@chr-hertel)
  • feature #43411 [HttpFoundation] Deprecate passing null as $requestIp in IpUtils (@W0rma)
  • feature #43526 Add a warning in WDT when using symfony/symfony (@fabpot)
  • feature #43481 [String] Add trimSuffix() and trimPrefix() methods (@nicolas-grekas)
  • feature #43497 [Notifier] [Twilio] Ensure from/sender is valid via regex (@OskarStark)
  • feature #43492 Lower log level in case of retry (@jderusse)
  • feature #43479 [DependencyInjection] autowire union and intersection types (@nicolas-grekas)
  • feature #43134 [Notifier] Add sms77 Notifier Bridge (@matthiez)
  • feature #43378 [HttpFoundation] Deprecate upload_progress.* and url_rewriter.tags session options (@Matthew Covey)
  • feature #42582 [Security] Add authenticators info to the profiler (@chalasr)
  • feature #42723 [Messenger] Log when worker should stop and when SIGTERM is received (@ruudk)
  • feature #40168 [Validator] Added CssColor constraint (@welcoMattic)
  • feature #43328 [MonologBridge] Deprecate the Swiftmailer handler (@fabpot)
  • feature #43322 [MonologBridge] Deprecates ResetLoggersWorkerSubscriber (@lyrixx)
  • feature #43108 [HttpKernel] Add basic support for language negotiation (@GregoireHebert)
  • feature #41265 [Messenger] Add a middleware to log when transaction has been left open (@lyrixx)
  • feature #43280 [HttpClient] Add method to set response factory in mock client (@greeflas)
  • feature #42610 [Dotenv] Reimplementing symfony/flex' dump-env as a Symfony command (@abdielcs, @nicolas-grekas)
  • feature #42244 [HttpKernel] Add support for configuring log level, and status code by exception class (@lyrixx)
  • feature #43236 [Security] Add alias for FirewallMapInterface to @security.firewall.map (@lyrixx)
  • feature #43150 [Finder] Add recursive .gitignore files support (@julienfalque)
  • feature #41608 [Runtime] Possibility to define the env and/or debug key (@maxhelias)
  • feature #42257 [Messenger] Allow using user's serializer for message do not fit the expected JSON structure (@welcoMattic)
  • feature #43148 [Cache] Throw ValueError in debug mode when serialization fails (@nicolas-grekas)
  • feature #43139 [Notifier] Mattermost Notifier option to post in an other channel (@nathanaelmartel)
  • feature #42335 [Messenger] Add WorkerMetadata to Worker class. (@okwinza)
  • feature #42712 [Serializer] Save missing arguments in MissingConstructorArgumentsException (@BafS)
  • feature #43004 [Serializer] Throw NotNormalizableValueException when type is not known or not in body in discriminator map (@lyrixx)
  • feature #43121 [Notifier] [GoogleChat] remove support for deprecated "threadKey" parameter (@IonBazan)
  • feature #42338 [DomCrawler] Added Crawler::innerText() method (@Bilge)
  • feature #43095 [Form] Add the EnumType (@derrabus)
  • feature #43094 [Console] Add support of RGB functional notation (@alexandre-daubois)
  • feature #43098 [Validator] Add error's uid to Count and Length constraints with "exactly" option enabled (@VladGapanovich)
  • feature #42668 [Yaml] Use more concise float representation in dump (@dev97)
  • feature #43017 [HttpFoundation] Map multipart/form-data as form Content-Type (@keichinger)
  • feature #43015 [DependencyInjection] Allow injecting tagged iterator as service locator arguments (@IonBazan)
  • feature #42991 [FrameworkBundle] Add configureContainer(), configureRoutes() and getConfigDir() to MicroKernelTrait (@nicolas-grekas)
  • feature #43018 [Mailer] Adding support for TagHeader and MetadataHeader to the Sendgrid API transport (@gnito-org)
  • feature #42988 [ErrorHandler] Add helper script to patch type declarations (@wouterj)
  • feature #42982 Add Session Token to Amazon Mailer (@Jubeki)
  • feature #42959 [DependencyInjection] Make auto-aliases private by default (@nicolas-grekas)
  • feature #42957 [RateLimiter][Runtime][Translation] remove @experimental flag (@nicolas-grekas)
  • feature #41163 [Mesenger] Add support for reseting container services between 2 messages (@lyrixx)
  • feature #41858 [Translation] Translate translatable parameters (@kylekatarnls)
  • feature #42941 Implement Message Stream for Postmark Mailer (@driesvints)
  • feature #42532 [DependencyInjection] Sort services in service locator according to priority (@BoShurik)
  • feature #42502 [Serializer] Add support for collecting type error during denormalization (@lyrixx)
  • feature #40120 [Cache] Add CouchbaseCollectionAdapter compatibility with sdk 3.0.0 (@ajcerezo)
  • feature #42965 [Cache] Deprecate support for Doctrine Cache (@derrabus)
  • feature #41615 [Serializer] Add option to skip uninitialized typed properties (@vuryss)
  • feature #41566 [FrameworkBundle] Introduced new method for getting bundles config path (@a-menshchikov)
  • feature #42881 [Console] Add more context when CommandIsSuccessful fails (@yoannrenard)
  • feature #42900 [HttpFoundation] Add a flag to hasSession to distinguished session from factory (@jderusse)
  • feature #41390 [HttpKernel] Add session cookie handling in cli context (@alexander-schranz, @Nyholm)
  • feature #42800 Display the roles of the logged-in user in the Web Debug Toolbar (@NicoHaase)
  • feature #42872 [Mime] Update mime types (@fabpot)
  • feature #42039 [DependencyInjection] Autoconfigurable attributes on methods, properties and parameters (@ruudk)
  • feature #42710 [Mailer] Added OhMySMTP Bridge (@paul-oms)
  • feature #40987 [Config] Handle ignoreExtraKeys in config builder (@HypeMC)
  • feature #42426 [Notifier] Autoconfigure chatter.transport_factory (@ismail1432)
  • feature #42748 [Notifier] Add Esendex message ID to SentMessage object (@benr77)
  • feature #42526 [FrameworkBundle] Add BrowserKitAssertionsTrait::assertThatForBrowser (@koenreiniers)
  • feature #41527 [Ldap] Fixing the behaviour of getting LDAP Attributes (@mr-sven)
  • feature #42623 [ErrorHandler] Turn return-type annotations into deprecations by default + add mode to turn them into native types (@nicolas-grekas)
  • feature #42696 [Notifier] Mark Transport as final (@fabpot)
  • feature #42433 [Notifier] Add more explicit error if a SMSChannel doesn't have a Recipient (@ismail1432)
  • feature #42619 [Serializer] Deprecate support for returning empty, iterable, countable, raw object when normalizing (@lyrixx)
  • feature #42662 [Mailer] Consume a PSR-14 event dispatcher (@derrabus)
  • feature #42625 [DependencyInjection] Add service_closure() to the PHP-DSL (@HypeMC)
  • feature #42650 [Security] make TokenInterface::getUser() nullable to tell about unauthenticated tokens (@nicolas-grekas)
  • feature #42632 [Console] Deprecate HelperSet::setCommand() and getCommand() (@derrabus)
  • feature #41994 [Validator] Add support of nested attributes (@alexandre-daubois)
  • feature #42595 Fix incompatibilities with upcoming security 6.0 (@wouterj)
  • feature #42578 [Security] Deprecate legacy remember me services (@wouterj)
  • feature #42516 [Security] Deprecate built-in authentication entry points (@wouterj)
  • feature #42387 [Form] Deprecate calling FormErrorIterator::children() if the current element is not iterable (@W0rma)
  • feature #39641 [Yaml] Add --exclude and negatable --parse-tags option to lint:yaml command (@christingruber)
  • feature #42510 [Security] Deprecate remaining anonymous checks (@wouterj)
  • feature #42423 [Security] Deprecate AnonymousToken, non-UserInterface users, and token credentials (@wouterj)
  • feature #41954 [Filesystem] Add the Path class (@theofidry)
  • feature #42442 [FrameworkBundle] Deprecate AbstractController::get() and has() (@fabpot)
  • feature #42422 Clarify goals of AbstractController (@fabpot)
  • feature #42420 [Security] Deprecate legacy signatures (@wouterj)
  • feature #41754 [SecurityBundle] Create a smooth upgrade path for security factories (@wouterj)
  • feature #42198 [Security] Deprecate PassportInterface (@chalasr)
  • feature #42332 [HttpFoundation] Add litespeed_finish_request to Response (@thomas2411)
  • feature #42286 [HttpFoundation] Add SessionFactoryInterface (@kbond)
  • feature #42392 [HttpFoundation] Mark Request::get() internal (@ro0NL)
  • feature #39601 [Notifier] add SentMessageEvent and FailedMessageEvent (@ismail1432)
  • feature #42188 [Notifier] Add FakeChat Logger transport (@noniagriconomie)
  • feature #41522 [Notifier] Add TurboSms Bridge (@fre5h)
  • feature #42337 [Validator] Remove internal from ConstraintViolationAssertion (@jordisala1991)
  • feature #42123 [Notifier] Add FakeSMS Logger transport (@noniagriconomie)
  • feature #42297 [Serializer] Add support for serializing empty array as object (@lyrixx)
  • feature #42326 [Security] Deprecate remaining LogoutHandlerInterface implementations (@chalasr)
  • feature #42219 [Mailer] Add support of ping_threshold to SesTransportFactory (@Tyraelqp)
  • feature #40052 [ErrorHandler] Add button to copy the path where error is thrown (@lmillucci)
  • feature #38495 [Asset] [DX] Option to make asset manifests strict on missing item (@GromNaN)
  • feature #39828 [Translation] XliffLintCommand supports Github Actions annotations (@YaFou)
  • feature #39826 [TwigBridge] LintCommand supports Github Actions annotations (@YaFou)
  • feature #39141 [Notifier] Add Amazon SNS bridge (@adrien-chinour)
  • feature #42240 [Serializer] Add support for preserving empty object in object property (@lyrixx)
  • feature #42239 [Notifier] Add Yunpian Notifier Bridge (@welcoMattic)
  • feature #42195 [WebProfilerBundle] Redesigned the log section (@javiereguiluz)
  • feature #42163 [Messenger] [Redis] Prepare turning delete_after_ack to true in 6.0 (@chalasr)
  • feature #42180 [Notifier] Add bridge for smsc.ru (@kozlice)
  • feature #42137 [Finder] Make Comparator immutable (@derrabus)
  • feature #42127 [ExpressionLanguage] Store compiler and evaluator as closures (@derrabus)
  • feature #42094 [Notifier] [Slack] Throw error if maximum block limit is reached for slack message options (@norkunas)
  • feature #42050 [Security] Deprecate TokenInterface::isAuthenticated() (@chalasr)
  • feature #42090 [Notifier] [Slack] Include additional errors to slack notifier error message (@norkunas)
  • feature #41989 [Cache] make LockRegistry use semaphores when possible (@nicolas-grekas)
  • feature #41965 [Security] Deprecate "always authenticate" and "exception on no token" (@wouterj)
  • feature #41962 add ability to style doubles and integers independently (@1ma)
  • feature #40830 [Serializer] Add support of PHP backed enumerations (@alexandre-daubois)
  • feature #40908 [Cache] Deprecate DoctrineProvider (@derrabus)
  • feature #41717 Allow TranslatableMessage object in form option 'help' (@scuben)
  • feature #41705 [Notifier] add Mailjet SMS bridge (@jnadaud)
  • feature #41851 Add TesterTrait::assertCommandIsSuccessful() helper (@yoannrenard)
  • feature #39623 [Messenger] Added StopWorkerException (@lyrixx)
  • feature #41292 [Workflow] Add support for getting updated context after a transition (@lyrixx)
  • feature #41154 [Validator] Add support for ConstraintViolationList::createFromMessage() (@lyrixx)
  • feature #41874 [SecurityBundle] Hide security toolbar if no firewall matched (@wouterj)
  • feature #41375 [Notifier] Add MessageMedia Bridge (@vuphuong87)
  • feature #41923 [EventDispatcher] Deprecate configuring tags on RegisterListenersPass (@derrabus)
  • feature #41802 [Uid] Add NilUlid (@fancyweb)
  • feature #40738 [Notifier] Add options to Microsoft Teams notifier (@OskarStark)
  • feature #41172 [Notifier] Add Telnyx notifier bridge (@StaffNowa)
  • feature #41770 [HttpClient] Add default base_uri to MockHttpClient (@nicolas-grekas)
  • feature #41205 [TwigBridge] Add encore_entry_*_tags() to UndefinedCallableHandler, as no-op (@nicolas-grekas)
  • feature #41786 [FrameworkBundle] Add commented base64 version of secrets' keys (@nicolas-grekas)
  • feature #41432 [WebProfilerBundle] Improved the light/dark theme switching (@javiereguiluz)
  • feature #41540 [VarDumper] Add casters for Symfony UUIDs and ULIDs (@fancyweb)
  • feature #41530 [FrameworkBundle] Deprecate the public profiler service to private (@nicolas-grekas)
  • feature #41199 [FrameworkBundle] Deprecate the AdapterInterface autowiring alias, use CacheItemPoolInterface instead (@nicolas-grekas)
  • feature #41203 [FrameworkBundle] Add autowiring alias for HttpCache\StoreInterface (@nicolas-grekas)

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