This week, Symfony development activity focused on merging new features for the upcoming Symfony 7.4 and 8.0 versions: added a Video constraint, introduced an access_decision() Twig function to get the security voter decision details, and added support for DTOs in Input attributes for invokable commands. We also announced that Symfony will provide the official MCP SDK for PHP, announced the first talks of the SymfonyCon Amsterdam 2025 conference and continued celebrating the legacy of Ryan Weaver.

Symfony development highlights

This week, 76 pull requests were merged (59 in code and 17 in docs) and 44 issues were closed (35 in code and 9 in docs). Excluding merges, 37 authors made 18,757 additions and 6,253 deletions. See details for code and docs.

6.4 changelog:

  • d33a886: [Inflector, String] fix edge cases
  • bbfcf84: [Serializer] fix dealing with asymmetric visilibity for properties
  • e6dfb3d: [HttpFoundation] change session column type from TEXT to STRING in SQL Server
  • 1dd5bd1: [Messenger] fix incompatibility with expected lowercase columns in Firebird database
  • 2205b62: [Security] pass attributes to nested ChainUserProviders
  • 3cd859f: [Cache] make TagAwareAdapter registrable as a service
  • e3b664d: [Cache] fix internal representation of non-static values
  • 1ff83e0: [SecurityBundle] prevent accessing the tracked token storage when collecting data
  • a57c946: [Serializer] fix normalizing objects with accessors having the same name as a property
  • 713f099: [PHPUnit Bridge] replace backtick operator, deprecated in PHP 8.5, with shell_exec()
  • c5ac440: [Security] fix HttpUtils::createRequest() when the base request is forwarded
  • a143fa2: use the empty string instead of null as an array offset

7.3 changelog:

  • 6e42b36: [JsonStreamer] fix decoding iterable lists
  • 5ff7e23: [DependencyInjection] respect original service class when a proxy is defined
  • acb2027: [JsonStreamer] fix encoding iterable lists
  • 87ba5d8: [Config] fix ReflectionClassResource hash validation
  • 1778811: [DependencyInjection] fix optimizing ClassExistenceResource
  • e7c41fe: [Validator] fall back to legacy options handling if configured named arguments do not match
  • 9157094: [Routing] don't rebuild cache when controller action body changes
  • e265f33: [Messenger] map legacy options to the "sentinel" key when parsing DSNs

7.4 changelog:

  • 67016b9: [Serializer, Validator] add JSON schema for validating and autocompleting YAML config files
  • 7278aa0: [DependencyInjection] parse attributes found on abstract classes for resource definitions
  • 145abac: [Runtime] expose the runtime class in $_SERVER['APP_RUNTIME']
  • 18d7668: [DependencyInjection] allow multiple #[AsDecorator] attributes
  • 95f0098: [Validator] add Video constraint for validating video files
  • bae2c06: [DependencyInjection] optimize AutowireRequiredMethodsPass
  • 4919062: [Security, TwigBridge] add access_decision() and access_decision_for_user()
  • d052b75: [DoctrineBridge] use a single table in isSameDatabaseChecker
  • c539c77: [Validator] allow using attributes to declare compile-time constraint metadata
  • bde5221: [Serializer] allow using attributes to declare compile-time serialization metadata
  • c102159: [FrameworkBundle] do not parse attributes on abstract classes with DI < 7.4
  • a9dcea4: [VarExporter] add support for exporting named closures
  • 75935f8: [DependencyInjection] allow Class::function(...) and global_function(...) closures in PHP DSL for factories
  • eedf441: [Security, SecurityBundle] dump role hierarchy as mermaid chart
  • ae256f9: [Console] add #[Input] attribute to support DTOs in invokable commands

8.0 changelog:

  • 1d6ac79: [Security] make UserChainProvider implement AttributesBasedUserProvider
  • f7e16f1: remove ClassMetadataFactoryCompiler and other legacy cleanups

Newest issues and pull requests

Symfony Jobs

These are some of the most recent Symfony job offers:

  • Lead Symfony Developer at Buddy & Selly
    Full-time - €70,000 – €80,000 / year
    Full remote
    View details
  • Lead Symfony Developer at A-Cube API
    Full-time - €54,000 – €72,000 / year
    Full remote
    View details
  • Backend Symfony Developer at Spyrit
    Full-time - €40,000 – €55,000 / year
    Remote + part-time onsite (Versailles, France)
    View details
  • Backend Symfony Developer at Evergrowth
    Full-time - €60,000 – €72,000 / year
    Full remote
    View details
  • Backend Symfony Developer at Eneba
    Full-time - €55,000 – €66,000 / year
    Full remote
    View details

You can publish a Symfony job offer for free on symfony.com.

They talked about us

Call to Action

Published in #A week of symfony