November 30, 2016 Fabien Potencier

Symfony 3.2.0 has just been released. As for any other Symfony minor release, our backward compatibility promise applies and this means that you should be able to upgrade easily without changing anything in your code.

We've already blogged about some great new 3.2 features, but here is a curated list of the most relevant changes (we have 150+ new features in this releases in total):

New Component

Workflow: Symfony 3.2 introduces a new Workflow component (fabpot, lyrixx, Nyholm) (11882 and 19629)

FrameworkBundle

reduced drastically the number of mandatory dependencies (fabpot) (Doctrine Annotations lib in 20097, Security Core and Security CSRF components in 20075, Templating component in 20072, Translation component in 20070, Asset component in 20067)

(fabpot) (Doctrine Annotations lib in 20097, Security Core and Security CSRF components in 20075, Templating component in 20072, Translation component in 20070, Asset component in 20067) added new cache warmers (tgalopin) (annotations in 18533, validator in 19485, serializer in 19507)

(tgalopin) (annotations in 18533, validator in 19485, serializer in 19507) added support for prioritizing form type extension tags (dmaicher) (19790)

added CachePoolClearerPass for weak cache pool refs in cache clearers (nicolas-grekas) (19900)

added cache:pool:clear command (nicolas-grekas) (19891)

changed paths to relative ones in templates paths cache (tgalopin) (19687)

allowed to specify a domain when updating translations (antograssiot) (19325)

changed server:run logs to be displayed by default (nicolas-grekas) (19174)

added file helper to Controller (dfridrich) (18502)

moved YamlLintCommand to the Yaml component (chalasr) (19139)

added phpstorm ide (hason) (20019)

added path argument to dump a specific option in debug:config (chalasr) (18940)

Twig

Twig minimum version for all Symfony supported versions is now 1.28.

made Twig cache independent of the project root directory (fabpot) (20285)

(fabpot) (20285) refactored Twig extensions to decouple definitions from implementations (fabpot) (20093)

(fabpot) (20093) added Twig runtimes for "critical" Twig extensions (fabpot) (20094)

(fabpot) (20094) added a Twig runtime loader (fabpot) (20092)

added access to token from twig AppVariable (HeahDude) (19991)

Serializer

added a CSV encoder (dunglas) (19197)

(dunglas) (19197) added a YAML encoder (dunglas) (19326)

(dunglas) (19326) added support for specifying format for DateTimeNormalizer::denormalize (teohhanhui) (20217)

allowed to easily use static constructors (Ener-Getick) (19137)

deprecated SerializerAwareEncoder (JhonnyL) (18483)

Console

improved support for one command apps (lyrixx) (16906)

(lyrixx) (16906) added errors display in quiet mode (multi-io) (18781)

allowed multiple options to be set (SpacePossum) (19495)

added ability to regress the ProgressBar (jameshalsall) (19824)

added Lockable trait (geoffrey-brier) (18471)

added ConsoleLogger::hasErrored() (nicolas-grekas) (19090)

simplified simulation of user inputs in CommandTester (chalasr) (18710)

centralized input stream in base Input class (chalasr) (18999)

added aliases in command description instead of in different lines in application description (juanmirod) (18790)

added support for hidden commands (jwdeitch, Jordan Deitch) (20029)

ExpressionLanguage

made cache PSR6 compliant (Alexandre GESLIN) (19741)

added a way to hook on each node when dumping the AST (nicolas-grekas) (19060)

added a way to dump the AST (lyrixx) (19013)

DependencyInjection

allowed injecting ENV parameters at runtime using %env(MY_ENV_VAR)% (nicolas-grekas) (19681)

(nicolas-grekas) (19681) added automatic detection of definition classes when possible (Ener-Getick) (19191)

added priority support for CompilerPass classes (Ener-Getick) (18022)

deprecated access to private shared services. (hhamon) (19146)

added support for short services configurators syntax (voronkovich) (19190)

fixed ini file values conversion (fabpot) (20232)

added a trait to sort tagged services (iltar) (18482)

Security

added a SecurityUserValueResolver for controllers (iltar) (18510, tweaked in 19452)

(iltar) (18510, tweaked in 19452) introduced a FirewallConfig class accessible from FirewallContext (chalasr) (19398)

allowed runtime configuration of hash algorithm (nicolas-grekas) (19843)

exposed the required roles in AccessDeniedException (Nicofuma) (19473)

Cache

added PDO and Doctrine DBAL adapters (nicolas-grekas) (19519)

(nicolas-grekas) (19519) added tags based invalidation (nicolas-grekas) (19047)

(nicolas-grekas) (19047) added NullAdapter to disable cache (tgalopin) (18825)

(tgalopin) (18825) added PhpArrayAdapter to use shared memory on PHP 7.0 (tgalopin) (18823)

added PhpFilesAdapter (trakos, nicolas-grekas) (18894)

added generic TagAwareAdapter wrapper (replaces TagAwareRedisAdapter) (nicolas-grekas) (19524)

Routing

added support for unicode requirements (nicolas-grekas) (19604)

(nicolas-grekas) (19604) added support for appending a document fragment (rodnaph) (12979)

added support for array values in route defaults (xabbuh) (11394)

fixed URL generation to be compliant with PHP_QUERY_RFC3986 (jameshalsall) (19639)

Yaml

moved YamlLintCommand to the Yaml component (chalasr) (19139)

fixed parsing multi-line mapping values (xabbuh) (19304)

added Yaml::PARSE_EXCEPTION_ON_DUPLICATE to throw exceptions on duplicates (Alex Pott) (19529)

deprecated missing space after mapping key colon (xabbuh) (19504)

added support for parsing PHP constants (HeahDude) (18626)

deprecated comma separators in floats (xabbuh) (18785)

allowed using _ in some numeric notations (Taluu) (18486)

VarDumper

Add support for XmlReader (Taluu) (19151)

(Taluu) (19151) Add support for Redis (nicolas-grekas) (18675)

(nicolas-grekas) (18675) made exception dumps more compact (nicolas-grekas) (19289)

added line in trace indexes (nicolas-grekas) (19657)

handled attributes in Data clones for more semantic dumps (nicolas-grekas) (19797)

allowed dumping subparts of cloned Data structures (nicolas-grekas) (19672)

added $dumper->dump(..., true); (nicolas-grekas) (19755)

added ClassStub for clickable & shorter PHP identifiers (nicolas-grekas) (19826)

added LinkStub to create links in HTML dumps (nicolas-grekas) (19816)

made the line clickable to toggle dumps (nicolas-grekas) (19796)

WebProfiler Bundle

switch to VarDumper when displaying data in the profiler (wouterj, nicolas-grekas) (19614)

(wouterj, nicolas-grekas) (19614) added support for Content-Security-Policy context (romainneutron) (18568)

(romainneutron) (18568) added a default ide file link web view (jeremyFreeAgent) (19973)

(jeremyFreeAgent) (19973) added expansion of form nodes that contains children with errors (yceruto) (19339)

(yceruto) (19339) added current firewall information in Profiler (chalasr) (19490)

(19490) added support for window.fetch calls in ajax section (ivoba) (19576)

PhpUnit Bridge

replaced ErrorAssert by @expectedDeprecation (nicolas-grekas) (20255)

(nicolas-grekas) (20255) allowed configuring removed deps and phpunit versions (nicolas-grekas) (20256)

added a triggered errors assertion helper (xabbuh) (18880)

added bin/simple-phpunit wrapper (=phpunit - yaml - prophecy) (nicolas-grekas) (19915)

added support for native E_DEPRECATED (nicolas-grekas) (20040)

Validator

added support for egulias/email-validator 2.x (xabbuh) (19153)

allowed validating multiple groups in one GroupSequence step (enumag) (19982)

added context object method callback to choice validator (Peter Bouwdewijn) (19745)

made strict the default option for choice validation (peterrehm) (19257)

Form

changed FormTypeGuesserChain to accept Traversable (enumag) (20047)

added a DateInterval form type (MisatoTremor) (16809)

deprecated using Form::isValid() with an unsubmitted form (Ener-Getick) (17644)

added CallbackChoiceLoader (HeahDude) (18332)

HttpFoundation

added Request::isMethodIdempotent method (dunglas) (19322)

added support for the SameSite attribute in cookies. (iangcarroll) (19104)

added private by default when setting Cache-Control to no-cache (fabpot) (19143)

removed default cache headers for 301 redirects (e-moe) (18220)

Miscellaneous

[Process] allowed inheriting env vars instead of replacing them (nicolas-grekas) (19053)

[Filesystem] added a cross-platform readlink method (tgalopin) (17498)

[Filesystem] added a feature to create hardlinks for files (andrerom) (15458)

[DoctrineBridge] added a way to select the repository used by the UniqueEntity validator (ogizanagi) (15002)

[HttpKernel] allowed bundles to declare classes and annotated classes to compile using patterns (tgalopin) (19205)

[HttpKernel] add convenient method ArgumentResolver:: getDefaultArgumentValueResolvers (romainneutron) (19011)

[Translation] replaced %count% with a given number out of the box (bocharsky-bw) (19795)

[Config] added ExprBuilder::ifEmpty() (ogizanagi) (19764)

[PropertyInfo] extracted logic for converting a php doc to a Type (Ener-Getick) (19484)

[PropertyInfo] added support for singular adder and remover (dunglas) (18337)

[DomCrawler] added support for XPath expression evaluation (jakzal) (19430)

[ClassLoader] added ClassCollectionLoader::inline() to generate inlined-classes files (nicolas-grekas) (19276)

[PropertyAccess] added PSR-6 cache (dunglas) (16838)

[Monolog] added DebugProcessor (nicolas-grekas) (20416)

added cache reload when new files are added (fabpot) (20121)

You can read more about this new version by reading the Living on the Edge articles on this blog. Also read the UPGRADE guide for Symfony 3.2.

Want to upgrade to this new release? Fortunately, because Symfony protects backwards-compatibility very closely, this should be quite easy. Read our upgrade documentation to learn more.

Want to check the integrity of this new version? Read my blog post about signing releases .

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.