Today we are happy to introduce the first beta of the upcoming Symfony 2.5 version. As we announced a few months ago, Symfony project is currently focused on quality over features and backwards compatibility. That's why this new version is packed with dozens of bugfixes, code cleanups and improvements for each and every Symfony component.

This new Symfony version also takes backwards compatibility to the next level. In addition to being a core value for the project, we've introduced a new Backwards Compatibility Promise for minor Symfony versions.

With 142 commits, 301 modified files, 11,639 additions and 2,204 deletions, Symfony 2.5 is now feature frozen. During the next two months, we'll focus on tweaking these improvements and completing their documentation.

Meanwhile you can read the UPGRADE from 2.4 to 2.5 guide and test, hack and play with Symfony 2.5 code in many different ways:

  • Create a new project via Composer (recommended):
1
$ php composer.phar create-project symfony/framework-standard-edition somewhere/ 2.5.0-BETA1

What's new in Symfony 2.5

You can view the full changelog from 2.4 to 2.5 BETA 1 on the repository, but we have summarized below the most relevant changes and improvements:

General improvements

  • Added HHVM support for built-in web server (10017)
  • Added named encoders to EncoderFactory to allow different password hashing for each user instance (10005)
  • Added MutableAclProvider::updateUserSecurityIdentity to enable the update of a User's username while keeping its associated ACEs (8650)
  • Added a PSR-4 compatible class loader (10100)
  • Added configuration for additional request formats (9862)
  • Extract KernelTestCase from WebTestCase (9739)
  • Decoupled Twig commands from the Framework (9855)
  • Added support for JSON format in twig:lint command (10064)
  • Added ability to change JSON encoding options (9915)
  • Improved support for Google App Engine (9945)
  • Allowed non alphanumeric chars in object properties (to use expressions like $person->{'@email'}) (9843)
  • Added a simple way to replace a service by keeping a reference to the old one (10600)
  • Allowed giving a callback as an allowedValue to OptionsResolver (8375, 9963)
  • Added Process::disableOutput and Process::enableOutput methods (10425)
  • Added support for is.* methods in GetSetMethodNormalizer (10314)
  • Added a screaming mode to ErrorHandler to silence errors (10466)

Forms and validation improvements

  • Added an option for multiple files upload (8224)
  • Added delete_empty option to allow proper emptyData handling of collections (9773)
  • Added FormErrorBag (9099)
  • Errors now reference the field they were added to and the violation/exception that caused them (9993)
  • ObjectChoiceList now compares choices by their value, if a value path is given (10572)
  • Added Doctrine cache for Validator (9892)
  • Added a new strict email validator (9140)
  • Added a new validator for UUIDs (10291)
  • Replaced the node traversing approach for a recursive one in the Validator (10287)

Console component improvements

  • Added a much better and full-featured progress bar (10356)
  • Added a better way to ask questions to the user (and deprecated the DialogHelper) (10606)
  • Added a better TableHelperand deprecated the old Table (10365)
  • Commands from the container are now loaded after bundles' commands to easily override default commands (10257)
  • Added the possibility to set a different default command for the application (9776)
  • Added a way to set the process title (9780)
  • Added PTY mode in addition to the previous TTY mode and the convenience method mustRun() (8655)
  • Added standalone PSR-3 compliant logger (10194)

Improvements for designers

  • Added ability to set a specific version of the asset in templates (10593)
  • Added a command to list twig functions, filters, globals and tests (9818)

Improvements for translators

  • Added a translation:debug command that can be used to inspect unused/missing messages and compare them with the fallback ones (10368)
  • Added ability to support templates for relative paths to translation files (9852)
  • Added PotFileDumper (9224)

Improvements to make you more productive

  • Moved AcmeDemoBundle to SensioDistributionBundle (643)
  • Added a new config:debug command to dump the current configuration (10165)
  • Enhanced logs display in the web development toolbar (10473)
  • Improved the readability of the collected arrays in the profiler (10352)
  • Added possibility to specify method and host in router:match command (10439)
  • Added a yaml:lint command to validate the syntax of YAML files (9666)
  • Added TraceableEventDispatcher to allow debugging dispatchers (9814)
  • Enhanced the debug component to detect class names case mismatches and to dismiss hard to debug blank pages related to non-catchable and @-silenced fatal errors (10201)
  • Enhanced the error handling and stack trace displaying for catchable PHP errors (10725)