Skip to content

Instantly share code, notes, and snippets.

@lyrixx
Last active February 23, 2024 14:36
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lyrixx/fd5cd60d85265c26bfe8565d735db1b5 to your computer and use it in GitHub Desktop.
Save lyrixx/fd5cd60d85265c26bfe8565d735db1b5 to your computer and use it in GitHub Desktop.
Symfony CHANGELOG

Bridge/Doctrine

  • removed EntityChoiceList
  • removed $manager (2nd) and $class (3th) arguments of ORMQueryBuilderLoader
  • removed passing a query builder closure to ORMQueryBuilderLoader
  • removed loader and property options of the DoctrineType

Bridge/Monolog

  • deprecated interface Symfony\Component\HttpKernel\Log\LoggerInterface has been removed
  • deprecated methods Logger::crit(), Logger::emerg(), Logger::err() and Logger::warn() have been removed

Bridge/ProxyManager

  • First introduction of Symfony\Bridge\ProxyManager

Bridge/Twig

  • added helpers form(), form_start() and form_end()
  • deprecated form_enctype() in favor of form_start()

Bundle/FrameworkBundle

  • removed validator.api parameter
  • removed alias option of the form.type tag
  • [BC BREAK] added a way to disable the profiler (when disabling the profiler, it is now completely removed) To get the same "disabled" behavior as before, set enabled to true and collect to false
  • [BC BREAK] the Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\RegisterKernelListenersPass was moved to Component\HttpKernel\DependencyInjection\RegisterListenersPass
  • added ControllerNameParser::build() which converts a controller short notation (a:b:c) to a class::method notation
  • added possibility to run PHP built-in server in production environment
  • added possibility to load the serializer component in the service container
  • added route debug information when using the router:match command
  • added TimedPhpEngine
  • added --clean option to the translation:update command
  • added http_method_override option
  • added support for default templates per render tag
  • added FormHelper::form(), FormHelper::start() and FormHelper::end()
  • deprecated FormHelper::enctype() in favor of FormHelper::start()
  • RedirectController actions now receive the Request instance via the method signature.

Bundle/SecurityBundle

  • Removed the security.context service.
  • allowed for multiple IP address in security access_control rules

Bundle/TwigBundle

  • added option to configure a custom template escaping guesser (via autoescape_service and autoescape_service_method)

Bundle/WebProfilerBundle

  • removed profiler:import and profiler:export commands
  • draw retina canvas if devicePixelRatio is bigger than 1

Component/BrowserKit

Component/ClassLoader

  • The DebugClassLoader class has been removed
  • The DebugUniversalClassLoader class has been removed
  • The UniversalClassLoader class has been removed
  • The ApcUniversalClassLoader class has been removed
  • added a WinCacheClassLoader for WinCache

Component/Config

  • removed ReferenceDumper class
  • removed the ResourceInterface::isFresh() method
  • removed BCResourceInterfaceChecker class
  • removed ResourceInterface::getResource() method

Component/Console

  • added multiselect support to the select dialog helper
  • added Table Helper for tabular data rendering
  • added support for events in Application
  • added a way to normalize EOLs in ApplicationTester::getDisplay() and CommandTester::getDisplay()
  • added a way to set the progress bar progress via the setCurrent method
  • added support for multiple InputOption shortcuts, written as '-a|-b|-c'
  • added two additional verbosity levels, VERBOSITY_VERY_VERBOSE and VERBOSITY_DEBUG

Component/Debug

  • removed classes, methods and interfaces deprecated in 2.x
  • added the component

Component/DependencyInjection

  • removed all deprecated codes from 2.x versions

Component/DomCrawler

  • added Crawler::html()
  • [BC BREAK] Crawler::each() and Crawler::reduce() now return Crawler instances instead of DomElement instances
  • added schema relative URL support to links
  • added support for HTML5 'form' attribute

Component/EventDispatcher

  • The method getListenerPriority($eventName, $listener) has been added to the EventDispatcherInterface.
  • The methods Event::setDispatcher(), Event::getDispatcher(), Event::setName() and Event::getName() have been removed. The event dispatcher and the event name are passed to the listener call.

Component/Filesystem

  • removed $mode argument from Filesystem::dumpFile()
  • added the dumpFile() method to atomically write files

Component/Finder

  • removed deprecated classes
  • added a way to ignore unreadable directories (via Finder::ignoreUnreadableDirs())
  • unified the way subfolders that are not executable are handled by always throwing an AccessDeniedException exception

Component/Form

  • removed FormTypeInterface::setDefaultOptions() method
  • removed AbstractType::setDefaultOptions() method
  • removed FormTypeExtensionInterface::setDefaultOptions() method
  • removed AbstractTypeExtension::setDefaultOptions() method
  • added FormTypeInterface::configureOptions() method
  • added FormTypeExtensionInterface::configureOptions() method
  • deprecated FormPerformanceTestCase and FormIntegrationTestCase in the Symfony\Component\Form\Tests namespace and moved them to the Symfony\Component\Form\Test namespace
  • deprecated TypeTestCase in the Symfony\Component\Form\Tests\Extension\Core\Type namespace and moved it to the Symfony\Component\Form\Test namespace
  • changed FormRenderer::humanize() to humanize also camel cased field name
  • added RequestHandlerInterface and FormInterface::handleRequest()
  • deprecated passing a Request instance to FormInterface::bind()
  • added options "method" and "action" to FormType
  • deprecated option "virtual" in favor "inherit_data"
  • deprecated VirtualFormAwareIterator in favor of InheritDataAwareIterator
  • [BC BREAK] removed the "array" type hint from DataMapperInterface
  • improved forms inheriting their parent data to actually return that data from getData(), getNormData() and getViewData()
  • added component-level exceptions for various SPL exceptions changed all uses of the deprecated Exception class to use more specialized exceptions instead removed NotInitializedException, NotValidException, TypeDefinitionException, TypeLoaderException, CreationException
  • added events PRE_SUBMIT, SUBMIT and POST_SUBMIT
  • deprecated events PRE_BIND, BIND and POST_BIND
  • [BC BREAK] renamed bind() and isBound() in FormInterface to submit() and isSubmitted()
  • added methods submit() and isSubmitted() to Form
  • deprecated bind() and isBound() in Form
  • deprecated AlreadyBoundException in favor of AlreadySubmittedException
  • added support for PATCH requests
  • [BC BREAK] added initialize() to FormInterface
  • [BC BREAK] added getAutoInitialize() to FormConfigInterface
  • [BC BREAK] added setAutoInitialize() to FormConfigBuilderInterface
  • [BC BREAK] initialization for Form instances added to a form tree must be manually disabled
  • PRE_SET_DATA is now guaranteed to be called after children were added by the form builder, unless FormInterface::setData() is called manually
  • fixed CSRF error message to be translated
  • custom CSRF error messages can now be set through the "csrf_message" option
  • fixed: expanded single-choice fields now show a radio button for the empty value

Component/HttpFoundation

  • The precedence of parameters returned from Request::get() changed from "GET, PATH, BODY" to "PATH, GET, BODY"
  • added support for ranges of IPs in trusted proxies
  • UploadedFile::isValid now returns false if the file was not uploaded via HTTP (in a non-test mode)
  • Improved error-handling of \Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler to ensure the supplied PDO handler throws Exceptions on error (as the class expects). Added related test cases to verify that Exceptions are properly thrown when the PDO queries fail.

Component/HttpKernel

  • removed Symfony\Component\HttpKernel\Kernel::init()
  • removed Symfony\Component\HttpKernel\Kernel::isClassInActiveBundle() and Symfony\Component\HttpKernel\KernelInterface::isClassInActiveBundle()
  • removed Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher::setProfiler()
  • removed Symfony\Component\HttpKernel\EventListener\FragmentListener::getLocalIpAddresses()
  • removed Symfony\Component\HttpKernel\EventListener\LocaleListener::setRequest()
  • removed Symfony\Component\HttpKernel\EventListener\RouterListener::setRequest()
  • removed Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest()
  • removed Symfony\Component\HttpKernel\Fragment\FragmentHandler::setRequest()
  • removed Symfony\Component\HttpKernel\HttpCache\Esi::hasSurrogateEsiCapability()
  • removed Symfony\Component\HttpKernel\HttpCache\Esi::addSurrogateEsiCapability()
  • removed Symfony\Component\HttpKernel\HttpCache\Esi::needsEsiParsing()
  • removed Symfony\Component\HttpKernel\HttpCache\HttpCache::getEsi()
  • removed Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel
  • removed Symfony\Component\HttpKernel\DependencyInjection\RegisterListenersPass
  • removed Symfony\Component\HttpKernel\EventListener\ErrorsLoggerListener
  • removed Symfony\Component\HttpKernel\EventListener\EsiListener
  • removed Symfony\Component\HttpKernel\HttpCache\EsiResponseCacheStrategy
  • removed Symfony\Component\HttpKernel\HttpCache\EsiResponseCacheStrategyInterface
  • removed Symfony\Component\HttpKernel\Log\LoggerInterface
  • removed Symfony\Component\HttpKernel\Log\NullLogger
  • removed Symfony\Component\HttpKernel\Profiler::import()
  • removed Symfony\Component\HttpKernel\Profiler::export()
  • [BC BREAK] renamed Symfony\Component\HttpKernel\EventListener\DeprecationLoggerListener to Symfony\Component\HttpKernel\EventListener\ErrorsLoggerListener and changed its constructor
  • deprecated Symfony\Component\HttpKernel\Debug\ErrorHandler, Symfony\Component\HttpKernel\Debug\ExceptionHandler, Symfony\Component\HttpKernel\Exception\FatalErrorException and Symfony\Component\HttpKernel\Exception\FlattenException
  • deprecated Symfony\Component\HttpKernel\Kernel::init()
  • added the possibility to specify an id an extra attributes to hinclude tags
  • added the collect of data if a controller is a Closure in the Request collector
  • pass exceptions from the ExceptionListener to the logger using the logging context to allow for more detailed messages

Component/Process

  • added ProcessUtils::escapeArgument() to fix the bug in escapeshellarg() function on Windows
  • added Process::signal()
  • added Process::getPid()
  • added support for a TTY mode

Component/PropertyAccess

  • added PropertyAccessorBuilder, to enable or disable the support of "__call"
  • added support for "__call" in the PropertyAccessor (disabled by default)
  • [BC BREAK] changed PropertyAccessor to continue its search for a property or method even if a non-public match was found. Before, a PropertyAccessDeniedException was thrown in this case. Class PropertyAccessDeniedException was removed now.
  • deprecated PropertyAccess::getPropertyAccessor
  • added PropertyAccess::createPropertyAccessor and PropertyAccess::createPropertyAccessorBuilder

Component/Routing

  • added RequestContext::getQueryString()

Component/Security

  • removed all deprecated code
  • [BC BREAK] the BCrypt encoder constructor signature has changed (the first argument was removed) To use the BCrypt encoder, you now need PHP 5.5 or "ircmaxell/password-compat" as a composer dependency
  • [BC BREAK] return 401 instead of 500 when using use_forward during for form authentication
  • added a require_previous_session option to AbstractAuthenticationListener

Component/Serializer

  • added GetSetMethodNormalizer::setCamelizedAttributes to allow calling camel cased methods for underscored properties

Component/Translation

  • removed FileDumper::format() method.
  • Changed the visibility of the locale property in Translator from protected to private.
  • added classes to make operations on catalogues (like making a diff or a merge on 2 catalogues)
  • added Translator::getFallbackLocales()
  • deprecated Translator::setFallbackLocale() in favor of the new Translator::setFallbackLocales() method

Component/Validator

  • added the ISBN, ISSN, and IBAN validators
  • copied the constraints Optional and Required to the Symfony\Component\Validator\Constraints\ namespace and deprecated the original classes.
  • added comparison validators (EqualTo, NotEqualTo, LessThan, LessThanOrEqualTo, GreaterThan, GreaterThanOrEqualTo, IdenticalTo, NotIdenticalTo)

Component/Yaml

  • Yaml::parse() now throws an exception when a blackslash is not escaped in double-quoted strings

Bridge/Doctrine

  • added "{{ value }}" message placeholder to UniqueEntityValidator
  • deprecated MergeDoctrineCollectionListener::onBind in favor of MergeDoctrineCollectionListener::onSubmit
  • deprecated passing ChoiceListFactoryInterface as first argument of DoctrineChoiceLoader's constructor

Bundle/FrameworkBundle

  • Added Controller::json to simplify creating JSON responses when using the Serializer component
  • Deprecated absolute template paths support in the template name parser
  • Deprecated using core form types without dependencies as services
  • Added Symfony\Component\HttpHernel\DataCollector\RequestDataCollector::onKernelResponse()
  • Added Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector
  • Deprecated service serializer.mapping.cache.apc (use serializer.mapping.cache.doctrine.apc instead)

Bundle/WebProfilerBundle

  • added information about redirected and forwarded requests to the profiler

Component/Cache

  • added the component with strict PSR-6 implementations
  • added ApcuAdapter, ArrayAdapter, FilesystemAdapter and RedisAdapter
  • added AbstractAdapter, ChainAdapter and ProxyAdapter
  • added DoctrineAdapter and DoctrineProvider for bidirectional interoperability with Doctrine Cache

Component/Console

  • added truncate method to FormatterHelper
  • added setColumnWidth(s) method to Table

Component/DomCrawler

  • All the URI parsing logic have been abstracted in the AbstractUriElement class. The Link class is now a child of AbstractUriElement.
  • Added an Image class to crawl images and parse their src attribute, and selectImage, image, images methods in the Crawler (the image version of the equivalent link methods).

Component/Form

  • deprecated the "choices_as_values" option of ChoiceType
  • deprecated support for data objects that implements both Traversable and ArrayAccess in ResizeFormListener::preSubmit method
  • Using callable strings as choice options in ChoiceType has been deprecated and will be used as PropertyPath instead of callable in Symfony 4.0.
  • implemented DataTransformerInterface in TextType
  • deprecated caching loaded choice list in LazyChoiceList::$loadedList

Component/HttpFoundation

  • Added support for creating JsonResponse with a string of JSON data

Component/Serializer

  • added support for serializing objects that implement JsonSerializable
  • added the DenormalizerAwareTrait and NormalizerAwareTrait traits to support normalizer/denormalizer awareness
  • added the DenormalizerAwareInterface and NormalizerAwareInterface interfaces to support normalizer/denormalizer awareness
  • added a PSR-6 compatible adapter for caching metadata
  • added a MaxDepth option to limit the depth of the object graph when serializing objects
  • added support for serializing SplFileInfo objects
  • added support for serializing objects that implement DateTimeInterface
  • added AbstractObjectNormalizer as a base class for normalizers that deal with objects
  • added support to relation deserialization

Component/Translation

  • Deprecated the backup feature of the file dumper classes.

Component/Validator

  • deprecated DateTimeValidator::PATTERN constant
  • added a format option to the DateTime constraint

Component/Yaml

  • Strings that are not UTF-8 encoded will be dumped as base64 encoded binary data.

Bridge/Twig

  • added AppVariable::getToken()

  • Deprecated the possibility to inject the Form TwigRenderer into the FormExtension.

  • [BC BREAK] Registering the FormExtension without configuring a runtime loader for the TwigRenderer doesn't work anymore.

    Before:

Bundle/FrameworkBundle

  • Removed doctrine/annotations from the list of required dependencies in composer.json
  • Removed symfony/security-core and symfony/security-csrf from the list of required dependencies in composer.json
  • Removed symfony/templating from the list of required dependencies in composer.json
  • Removed symfony/translation from the list of required dependencies in composer.json
  • Removed symfony/asset from the list of required dependencies in composer.json
  • The Resources/public/images/* files have been removed.
  • The Resources/public/css/*.css files have been removed (they are now inlined in TwigBundle).
  • Added possibility to prioritize form type extensions with 'priority' attribute on tags form.type_extension

Bundle/SecurityBundle

  • Added the SecurityUserValueResolver to inject the security users in actions via Symfony\Component\Security\Core\User\UserInterface in the method signature.

Component/BrowserKit

  • Client HTTP user agent has been changed to 'Symfony BrowserKit'

Component/Cache

  • added TagAwareAdapter for tags-based invalidation
  • added PdoAdapter with PDO and Doctrine DBAL support
  • added PhpArrayAdapter and PhpFilesAdapter for OPcache-backed shared memory storage (PHP 7+ only)
  • added NullAdapter

Component/Console

  • added setInputs() method to CommandTester for ease testing of commands expecting inputs
  • added setStream() and getStream() methods to Input (implement StreamableInputInterface)
  • added StreamableInputInterface
  • added LockableTrait

Component/Debug

  • FlattenException::getTrace() now returns additional type descriptions integer and float.

Component/DependencyInjection

  • allowed to prioritize compiler passes by introducing a third argument to PassConfig::addPass(), to Compiler::addPass and to ContainerBuilder::addCompilerPass()
  • added support for PHP constants in YAML configuration files
  • deprecated the ability to set or unset a private service with the Container::set() method
  • deprecated the ability to check for the existence of a private service with the Container::has() method
  • deprecated the ability to request a private service with the Container::get() method
  • deprecated support for generating a dumped Container without populating the method map

Component/Filesystem

  • added readlink() as a platform independent method to read links

Component/Form

  • added CallbackChoiceLoader
  • implemented ChoiceLoaderInterface in children of ChoiceType

Component/HttpKernel

  • deprecated DataCollector::varToString(), use cloneVar() instead
  • changed surrogate capability name in AbstractSurrogate::addSurrogateCapability to 'symfony'

Component/Routing

  • Added support for bool, int, float, string, list and map defaults in XML configurations.
  • Added support for UTF-8 requirements

2.8.0

Component/Security

  • added $attributes and $subject with getters/setters to Symfony\Component\Security\Core\Exception\AccessDeniedException

Component/Translation

  • Added support for escaping | in plural translations with double pipe.

Component/Validator

  • deprecated Tests\Constraints\AbstractContraintValidatorTest in favor of Test\ConstraintValidatorTestCase

Component/Yaml

  • Mappings with a colon (:) that is not followed by a whitespace are deprecated when the mapping key is not quoted and will lead to a ParseException in Symfony 4.0 (e.g. foo:bar must be foo: bar).

Bridge/Monolog

  • Improved the console handler output formatting by adding var-dumper support

Bridge/PhpUnit

  • using the testLegacy prefix in method names to mark a test as legacy is deprecated, use the @group legacy notation instead
  • using the Legacy prefix in class names to mark a test as legacy is deprecated, use the @group legacy notation instead

Bridge/ProxyManager

  • [BC BREAK] The ProxyDumper class is now final

Bridge/Twig

  • added a workflow_has_marked_place function
  • added a workflow_marked_places function

Bundle/FrameworkBundle

  • Not defining the type option of the framework.workflows.* configuration entries is deprecated. The default value will be state_machine in Symfony 4.0.
  • Deprecated the CompilerDebugDumpPass class
  • Deprecated the "framework.trusted_proxies" configuration option and the corresponding "kernel.trusted_proxies" parameter
  • Added a new new version strategy option called json_manifest_path that allows you to use the JsonManifestVersionStrategy.
  • Added Symfony\Bundle\FrameworkBundle\Controller\AbstractController. It provides the same helpers as the Controller class, but does not allow accessing the dependency injection container, in order to encourage explicit dependency declarations.
  • Added support for the controller.service_arguments tag, for injecting services into controllers' actions
  • Changed default configuration for assets/forms/validation/translation/serialization/csrf from canBeEnabled() to canBeDisabled() when Flex is used
  • The server:* commands and their associated router files were moved to WebServerBundle
  • Translation related services are not loaded anymore when the framework.translator option is disabled.
  • Added GlobalVariables::getToken()
  • Deprecated Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddConsoleCommandPass. Use Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass instead.
  • Added configurable paths for validation files
  • Deprecated SerializerPass, use Symfony\Component\Serializer\DependencyInjection\SerializerPass instead
  • Deprecated FormPass, use Symfony\Component\Form\DependencyInjection\FormPass instead
  • Deprecated SessionListener
  • Deprecated TestSessionListener
  • Deprecated Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ConfigCachePass. Use Symfony\Component\Console\DependencyInjection\ConfigCachePass instead.
  • Deprecated PropertyInfoPass, use Symfony\Component\PropertyInfo\DependencyInjection\PropertyInfoPass instead
  • Deprecated ControllerArgumentValueResolverPass. Use Symfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPass instead
  • Deprecated RoutingResolverPass, use Symfony\Component\Routing\DependencyInjection\RoutingResolverPass instead
  • [BC BREAK] The server:run, server:start, server:stop and server:status console commands have been moved to a dedicated bundle. Require symfony/web-server-bundle in your composer.json and register Symfony\Bundle\WebServerBundle\WebServerBundle in your AppKernel to use them.
  • Added $defaultLocale as 3rd argument of Translator::__construct() making Translator works with any PSR-11 container
  • Added framework.serializer.mapping config option allowing to define custom serialization mapping files and directories
  • Deprecated AddValidatorInitializersPass, use Symfony\Component\Validator\DependencyInjection\AddValidatorInitializersPass instead
  • Deprecated AddConstraintValidatorsPass, use Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass instead
  • Deprecated ValidateWorkflowsPass, use Symfony\Component\Workflow\DependencyInjection\ValidateWorkflowsPass instead
  • Deprecated ConstraintValidatorFactory, use Symfony\Component\Validator\ContainerConstraintValidatorFactory instead.

Bundle/SecurityBundle

  • Deprecated instantiating UserPasswordEncoderCommand without its constructor arguments fully provided.
  • Deprecated UserPasswordEncoderCommand::getContainer() and relying on the ContainerAwareCommand sub class or ContainerAwareInterface implementation for this command.
  • Deprecated the FirewallMap::$map and $container properties.
  • [BC BREAK] Keys of the users node for in_memory user provider are no longer normalized.
  • deprecated FirewallContext::getListeners()

Bundle/TwigBundle

  • Deprecated ContainerAwareRuntimeLoader

Bundle/WebServerBundle

  • Added bundle

Component/BrowserKit

  • [BC BREAK] The request method is dropped from POST to GET when the response status code is 301.

Component/Cache

  • [EXPERIMENTAL] added CacheItem::getPreviousTags() to get bound tags coming from the pool storage if any
  • added PSR-16 "Simple Cache" implementations for all existing PSR-6 adapters
  • added Psr6Cache and SimpleCacheAdapter for bidirectional interoperability between PSR-6 and PSR-16
  • added MemcachedAdapter (PSR-6) and MemcachedCache (PSR-16)
  • added TraceableAdapter (PSR-6) and TraceableCache (PSR-16)

Component/ClassLoader

  • deprecated the component: use Composer instead

Component/Config

  • added ReflectionClassResource class
  • added second $exists constructor argument to ClassExistenceResource
  • made ClassExistenceResource work with interfaces and traits
  • added ConfigCachePass (originally in FrameworkBundle)
  • added castToArray() helper to turn any config value into an array

Component/Console

  • added ExceptionListener
  • added AddConsoleCommandPass (originally in FrameworkBundle)
  • [BC BREAK] Input::getOption() no longer returns the default value for options with value optional explicitly passed empty
  • added console.error event to catch exceptions thrown by other listeners
  • deprecated console.exception event in favor of console.error
  • added ability to handle CommandNotFoundException through the console.error event

Component/Debug

  • deprecated the ContextErrorException class: use \ErrorException directly now

Component/DependencyInjection

  • deprecated autowiring services based on the types they implement; rename (or alias) your services to their FQCN id to make them autowirable
  • added "ServiceSubscriberInterface" - to allow for per-class explicit service-locator definitions
  • added "container.service_locator" tag for defining service-locator services
  • added anonymous services support in YAML configuration files using the !service tag.
  • added "TypedReference" and "ServiceClosureArgument" for creating service-locator services
  • added ServiceLocator - a PSR-11 container holding a set of services to be lazily loaded
  • added "instanceof" section for local interface-defined configs
  • added prototype services for PSR4-based discovery and registration
  • added ContainerBuilder::getReflectionClass() for retrieving and tracking reflection class info
  • deprecated ContainerBuilder::getClassResource(), use ContainerBuilder::getReflectionClass() or ContainerBuilder::addObjectResource() instead
  • added ContainerBuilder::fileExists() for checking and tracking file or directory existence
  • deprecated autowiring-types, use aliases instead
  • added support for omitting the factory class name in a service definition if the definition class is set
  • deprecated case insensitivity of service identifiers
  • added "iterator" argument type for lazy iteration over a set of values and services
  • added file-wide configurable defaults for service attributes "public", "tags", "autowire" and "autoconfigure"
  • made the "class" attribute optional, using the "id" as fallback
  • using the PhpDumper with an uncompiled ContainerBuilder is deprecated and will not be supported anymore in 4.0
  • deprecated the DefinitionDecorator class in favor of ChildDefinition
  • allow config files to be loaded using a glob pattern
  • [BC BREAK] the NullDumper class is now final

Component/Dotenv

  • [BC BREAK] Since v3.3.7, the latest Dotenv files override the previous ones. Real env vars are not affected and are not overridden.
  • added the component

Component/EventDispatcher

  • The ContainerAwareEventDispatcher class has been deprecated. Use EventDispatcher with closure factories instead.

Component/Filesystem

  • added appendToFile() to append contents to existing files

Component/Finder

  • added double-star matching to Glob::toRegex()

Component/Form

  • deprecated using "choices" option in CountryType, CurrencyType, LanguageType, LocaleType, and TimezoneType when "choice_loader" is not null
  • added Symfony\Component\Form\FormErrorIterator::findByCodes()
  • added getTypedExtensions, getTypes, and getTypeGuessers to Symfony\Component\Form\Test\FormIntegrationTestCase
  • added FormPass

Component/HttpFoundation

  • the Request::setTrustedProxies() method takes a new $trustedHeaderSet argument, see http://symfony.com/doc/current/components/http_foundation/trusting_proxies.html for more info,
  • deprecated the Request::setTrustedHeaderName() and Request::getTrustedHeaderName() methods,
  • added File\Stream, to be passed to BinaryFileResponse when the size of the served file is unknown, disabling Range and Content-Length handling, switching to chunked encoding instead
  • added the Cookie::fromString() method that allows to create a cookie from a raw header string

Component/HttpKernel

  • added kernel.project_dir and Kernel::getProjectDir()
  • deprecated kernel.root_dir and Kernel::getRootDir()
  • deprecated Kernel::getEnvParameters()
  • deprecated the special SYMFONY__ environment variables
  • added the possibility to change the query string parameter used by UriSigner
  • deprecated LazyLoadingFragmentHandler::addRendererService()
  • deprecated Extension::addClassesToCompile() and Extension::getClassesToCompile()
  • deprecated Psr6CacheClearer::addPool()

Component/Ldap

  • The RenameEntryInterface inferface is deprecated, and will be merged with EntryManagerInterface in 4.0.

Component/Process

  • added command line arrays in the Process class
  • added $env argument to Process::start(), run(), mustRun() and restart() methods
  • deprecated the ProcessUtils::escapeArgument() method
  • deprecated not inheriting environment variables
  • deprecated configuring proc_open() options
  • deprecated configuring enhanced Windows compatibility
  • deprecated configuring enhanced sigchild compatibility

Component/PropertyInfo

  • Added PropertyInfoPass

Component/Routing

  • [DEPRECATION] Class parameters have been deprecated and will be removed in 4.0.
    • router.options.generator_class
    • router.options.generator_base_class
    • router.options.generator_dumper_class
    • router.options.matcher_class
    • router.options.matcher_base_class
    • router.options.matcher_dumper_class
    • router.options.matcher.cache_class
    • router.options.generator.cache_class

Component/Security

  • deprecated AccessDecisionManager::setVoters() in favor of passing the voters to the constructor.
  • [EXPERIMENTAL] added a json_login listener for stateless authentication

Component/Serializer

  • added SerializerPass

Component/Validator

  • added AddValidatorInitializersPass
  • added AddConstraintValidatorsPass
  • added ContainerConstraintValidatorFactory

Component/WebLink

  • added the component

Component/Workflow

  • Added support for expressions to guard transitions and added an is_granted() function that can be used in these expressions to use the authorization checker.
  • The DefinitionBuilder class now provides a fluent interface.
  • The AuditTrailListener now includes the workflow name in its log entries.
  • Added workflow.entered events which is fired after the marking has been set.
  • Deprecated class name support in WorkflowRegistry::add() as second parameter. Wrap the class name in an instance of ClassInstanceSupportStrategy instead.
  • Added support for Event::getWorkflowName().
  • Added SupportStrategyInterface to allow custom strategies to decide whether or not a workflow supports a subject.
  • Added ValidateWorkflowPass.

Component/Yaml

  • Starting an unquoted string with a question mark followed by a space is deprecated and will throw a ParseException in Symfony 4.0.

Bridge/Doctrine

  • added support for doctrine/dbal v2.6 types
  • added cause of UniqueEntity constraint violation
  • deprecated DbalSessionHandler and DbalSessionHandlerSchema in favor of Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler

Bridge/PhpUnit

  • added a CoverageListener to enhance the code coverage report
  • all deprecations but those from tests marked with @group legacy are always displayed when not in weak mode

Bridge/Twig

  • added an only keyword to form_theme tag to disable usage of default themes when rendering a form
  • deprecated Symfony\Bridge\Twig\Form\TwigRenderer
  • deprecated DebugCommand::set/getTwigEnvironment. Pass an instance of Twig\Environment as first argument of the constructor instead
  • deprecated LintCommand::set/getTwigEnvironment. Pass an instance of Twig\Environment as first argument of the constructor instead

Bundle/FrameworkBundle

  • Added translator.default_path option and parameter
  • Session use_strict_mode is now enabled by default and the corresponding option has been deprecated
  • Made the cache:clear command to not clear "app" PSR-6 cache pools anymore, but to still clear "system" ones; use the cache:pool:clear command to clear "app" pools instead
  • Always register a minimalist logger that writes in stderr
  • Deprecated profiler.matcher option
  • Added support for EventSubscriberInterface on MicroKernelTrait
  • Removed doctrine/cache from the list of required dependencies in composer.json
  • Deprecated validator.mapping.cache.doctrine.apc service
  • The symfony/stopwatch dependency has been removed, require it via composer require symfony/stopwatch in your dev environment.
  • Deprecated using the KERNEL_DIR environment variable with KernelTestCase::getKernelClass().
  • Deprecated the KernelTestCase::getPhpUnitXmlDir() and KernelTestCase::getPhpUnitCliConfigArgument() methods.
  • Deprecated AddCacheClearerPass, use tagged iterator arguments instead.
  • Deprecated AddCacheWarmerPass, use tagged iterator arguments instead.
  • Deprecated TranslationDumperPass, use Symfony\Component\Translation\DependencyInjection\TranslationDumperPass instead
  • Deprecated TranslationExtractorPass, use Symfony\Component\Translation\DependencyInjection\TranslationExtractorPass instead
  • Deprecated TranslatorPass, use Symfony\Component\Translation\DependencyInjection\TranslatorPass instead
  • Added command attribute to the console.command tag which takes the command name as value, using it makes the command lazy
  • Added cache:pool:prune command to allow manual stale cache item pruning of supported PSR-6 and PSR-16 cache pool implementations
  • Deprecated Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader, use Symfony\Component\Translation\Reader\TranslationReader instead
  • Deprecated translation.loader service, use translation.reader instead
  • AssetsInstallCommand::__construct() now takes an instance of Symfony\Component\Filesystem\Filesystem as first argument
  • CacheClearCommand::__construct() now takes an instance of Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface as first argument
  • CachePoolClearCommand::__construct() now takes an instance of Symfony\Component\HttpKernel\CacheClearer\Psr6CacheClearer as first argument
  • EventDispatcherDebugCommand::__construct() now takes an instance of Symfony\Component\EventDispatcher\EventDispatcherInterface as first argument
  • RouterDebugCommand::__construct() now takes an instance of Symfony\Component\Routing\RouterInterface as first argument
  • RouterMatchCommand::__construct() now takes an instance of Symfony\Component\Routing\RouterInterface as first argument
  • TranslationDebugCommand::__construct() now takes an instance of Symfony\Component\Translation\TranslatorInterface as first argument
  • TranslationUpdateCommand::__construct() now takes an instance of Symfony\Component\Translation\TranslatorInterface as first argument
  • AssetsInstallCommand, CacheClearCommand, CachePoolClearCommand, EventDispatcherDebugCommand, RouterDebugCommand, RouterMatchCommand, TranslationDebugCommand, TranslationUpdateCommand, XliffLintCommand and YamlLintCommand classes have been marked as final
  • Added asset.request_context.base_path and asset.request_context.secure parameters to provide a default request context in case the stack is empty (similar to router.request_context.* parameters)
  • Display environment variables managed by Dotenv in AboutCommand

Bundle/SecurityBundle

  • Added new security.helper service that is an instance of Symfony\Component\Security\Core\Security and provides shortcuts for common security tasks.
  • Tagging voters with the security.voter tag without implementing the VoterInterface on the class is now deprecated and will be removed in 4.0.
  • [BC BREAK] FirewallContext::getListeners() now returns \Traversable|array
  • added info about called security listeners in profiler
  • Added logout_on_user_change to the firewall options. This config item will trigger a logout when the user has changed. Should be set to true to avoid deprecations in the configuration.
  • deprecated HTTP digest authentication
  • deprecated command acl:set along with SetAclCommand class
  • deprecated command init:acl along with InitAclCommand class
  • Added support for the new Argon2i password encoder
  • added stateless option to the switch_user listener
  • deprecated auto picking the first registered provider when no configured provider on a firewall and ambiguous

Bundle/TwigBundle

  • added exclusive Twig namespace only for root bundles
  • deprecated Symfony\Bundle\TwigBundle\Command\DebugCommand, use Symfony\Bridge\Twig\Command\DebugCommand instead
  • deprecated relying on the ContainerAwareInterface implementation for Symfony\Bundle\TwigBundle\Command\LintCommand
  • added option to configure default path templates (via default_path)

Bundle/WebProfilerBundle

  • Deprecated the web_profiler.position config option (in 4.0 version the toolbar will always be displayed at the bottom) and the web_profiler.debug_toolbar.position container parameter.

Bundle/WebServerBundle

  • WebServer can now use * as a wildcard to bind to 0.0.0.0 (INADDR_ANY)

Component/Asset

  • added optional arguments $basePath and $secure in RequestStackContext::__construct() to provide a default request context in case the stack is empty

Component/BrowserKit

  • [BC BREAK] Client will skip redirects during history navigation (back and forward calls) according to W3C Browsers recommendation

Component/Cache

  • added using options from Memcached DSN
  • added PruneableInterface so PSR-6 or PSR-16 cache implementations can declare support for manual stale cache pruning
  • added prune logic to FilesystemTrait, PhpFilesTrait, PdoTrait, TagAwareAdapter and ChainTrait
  • now FilesystemAdapter, PhpFilesAdapter, FilesystemCache, PhpFilesCache, PdoAdapter, PdoCache, ChainAdapter, and ChainCache implement PruneableInterface and support manual stale cache pruning

Component/Config

  • added setDeprecated() method to indicate a deprecated node
  • added XmlUtils::parse() method to parse an XML string
  • deprecated ConfigCachePass

Component/Console

  • added SHELL_VERBOSITY env var to control verbosity
  • added CommandLoaderInterface, FactoryCommandLoader and PSR-11 ContainerCommandLoader for commands lazy-loading
  • added a case-insensitive command name matching fallback
  • added static Command::$defaultName/getDefaultName(), allowing for commands to be registered at compile time in the application command loader. Setting the $defaultName property avoids the need for filling the command attribute on the console.command tag when using AddConsoleCommandPass.

Component/Debug

  • deprecated ErrorHandler::stackErrors() and ErrorHandler::unstackErrors()

Component/DependencyInjection

  • moved the ExtensionCompilerPass to before-optimization passes with priority -1000
  • deprecated "public-by-default" definitions and aliases, the new default will be "private" in 4.0
  • added EnvVarProcessorInterface and corresponding "container.env_var_processor" tag for processing env vars
  • added support for ignore-on-uninitialized references
  • deprecated service auto-registration while autowiring
  • deprecated the ability to check for the initialization of a private service with the Container::initialized() method
  • deprecated support for top-level anonymous services in XML
  • deprecated case insensitivity of parameter names
  • deprecated the ResolveDefinitionTemplatesPass class in favor of ResolveChildDefinitionsPass
  • added TaggedIteratorArgument with YAML (!tagged foo) and XML (<service type="tagged"/>) support
  • deprecated AutowireExceptionPass and AutowirePass::getAutowiringExceptions(), use Definition::addError() and the DefinitionErrorExceptionPass instead

Component/EventDispatcher

  • Implementing TraceableEventDispatcherInterface without the reset() method has been deprecated.

Component/Filesystem

  • support for passing relative paths to Filesystem::makePathRelative() is deprecated and will be removed in 4.0

Component/Finder

  • deprecated Symfony\Component\Finder\Iterator\FilterIterator
  • added Finder::hasResults() method to check if any results were found

Component/Form

  • added DebugCommand
  • deprecated ChoiceLoaderInterface implementation in TimezoneType
  • added options "input" and "regions" to TimezoneType
  • added an option to Symfony\Component\Form\FormRendererEngineInterface::setTheme() and Symfony\Component\Form\FormRendererInterface::setTheme() to disable usage of default themes when rendering a form

Component/HttpFoundation

  • implemented PHP 7.0's SessionUpdateTimestampHandlerInterface with a new AbstractSessionHandler base class and a new StrictSessionHandler wrapper
  • deprecated the WriteCheckSessionHandler, NativeSessionHandler and NativeProxy classes
  • deprecated setting session save handlers that do not implement \SessionHandlerInterface in NativeSessionStorage::setSaveHandler()
  • deprecated using MongoDbSessionHandler with the legacy mongo extension; use it with the mongodb/mongodb package and ext-mongodb instead
  • deprecated MemcacheSessionHandler; use MemcachedSessionHandler instead

Component/HttpKernel

  • added a minimalist PSR-3 Logger class that writes in stderr
  • made kernels implementing CompilerPassInterface able to process the container
  • deprecated bundle inheritance
  • added RebootableInterface and implemented it in Kernel
  • deprecated commands auto registration
  • deprecated EnvParametersResource
  • added Symfony\Component\HttpKernel\Client::catchExceptions()
  • deprecated the ChainCacheClearer::add() method
  • deprecated the CacheaWarmerAggregate::add() and setWarmers() methods
  • made CacheWarmerAggregate and ChainCacheClearer classes final
  • added the possibility to reset the profiler to its initial state
  • deprecated data collectors without a reset() method
  • deprecated implementing DebugLoggerInterface without a clear() method

Component/Lock

  • added the component

Component/OptionsResolver

  • added OptionsResolverIntrospector to inspect options definitions inside an OptionsResolver instance
  • added array of types support in allowed types (e.g int[])

Component/Process

  • deprecated the ProcessBuilder class
  • deprecated calling Process::start() without setting a valid working directory beforehand (via setWorkingDirectory() or constructor)

Component/Routing

  • Added NoConfigurationException.
  • Added the possibility to define a prefix for all routes of a controller via @Route(name="prefix_")
  • Added support for prioritized routing loaders.
  • Add matched and default parameters to redirect responses
  • Added support for a controller keyword for configuring route controllers in YAML and XML configurations.

Component/Security

  • Added getUser, getToken and isGranted methods to Security.
  • added a setToken() method to the SwitchUserEvent class to allow to replace the created token while switching users when custom token generation is required by application.
  • Using voters that do not implement the VoterInterfaceis now deprecated in the AccessDecisionManager and this functionality will be removed in 4.0.
  • Using the ContextListener without setting the logoutOnUserChange property will trigger a deprecation when the user has changed. As of 4.0 the user will always be logged out when the user has changed between requests.
  • deprecated HTTP digest authentication
  • Added a new password encoder for the Argon2i hashing algorithm
  • deprecated GuardAuthenticatorInterface in favor of AuthenticatorInterface
  • deprecated to return null from getCredentials() in classes that extend AbstractGuardAuthenticator. Return false from supports() instead.

Component/Serializer

  • added AbstractObjectNormalizer::DISABLE_TYPE_ENFORCEMENT context option to disable throwing an UnexpectedValueException on a type mismatch
  • added support for serializing DateInterval objects
  • added getter for extra attributes in ExtraAttributesException
  • improved CsvEncoder to handle variable nested structures
  • CSV headers can be passed to the CsvEncoder via the csv_headers serialization context variable
  • added $context when checking for encoding, decoding and normalizing in Serializer

Component/Stopwatch

  • added the Stopwatch::reset() method
  • allowed to measure sub-millisecond times by introducing an argument to the constructor of Stopwatch

Component/Translation

  • Added TranslationDumperPass
  • Added TranslationExtractorPass
  • Added TranslatorPass
  • Added TranslationReader and TranslationReaderInterface
  • Added <notes> section to the Xliff 2.0 dumper.
  • Improved Xliff 2.0 loader to load <notes> section.
  • Added TranslationWriterInterface
  • Deprecated TranslationWriter::writeTranslations in favor of TranslationWriter::write
  • added support for adding custom message formatter and decoupling the default one.
  • Added PhpExtractor
  • Added PhpStringTokenParser

Component/Validator

  • added support for validation groups to the Valid constraint
  • not setting the strict option of the Choice constraint to true is deprecated and will throw an exception in Symfony 4.0
  • setting the checkDNS option of the Url constraint to true is deprecated in favor of the Url::CHECK_DNS_TYPE_* constants values and will throw an exception in Symfony 4.0
  • added min/max amount of pixels check to Image constraint via minPixels and maxPixels
  • added a new "propertyPath" option to comparison constraints in order to get the value to compare from an array or object

Component/VarDumper

  • added AbstractCloner::setMinDepth() function to ensure minimum tree depth
  • deprecated MongoCaster

Component/Workflow

  • Added guard is_valid() method support.
  • Added support for Event::getWorkflowName() for "announce" events.
  • Added workflow.completed events which are fired after a transition is completed.

Component/Yaml

  • added support for parsing YAML files using the Yaml::parseFile() or Parser::parseFile() method

Bridge/Doctrine

  • the first constructor argument of the DoctrineChoiceLoader class must be an ObjectManager implementation
  • removed the MergeDoctrineCollectionListener::onBind() method
  • trying to reset a non-lazy manager service using the ManagerRegistry::resetService() method throws an exception
  • removed the DoctrineParserCache class
  • added support for doctrine/dbal v2.6 types
  • added cause of UniqueEntity constraint violation
  • deprecated DbalSessionHandler and DbalSessionHandlerSchema in favor of Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
  • deprecated DoctrineOrmTestCase class

Bridge/Monolog

  • the $format, $dateFormat, $allowInlineLineBreaks, and $ignoreEmptyContextAndExtra constructor arguments of the ConsoleFormatter class have been removed, use $options instead
  • the DebugHandler class has been removed
  • added ConsoleHandler and ConsoleFormatter which can be used to show log messages in the console output depending on the verbosity settings

Bridge/PhpUnit

  • support for the testLegacy prefix in method names to mark a test as legacy has been dropped, use the @group legacy notation instead
  • support for the Legacy prefix in class names to mark tests as legacy has been dropped, use the @group legacy notation instead
  • support for passing an array of mocked namespaces not indexed by the mock feature to the constructor of the SymfonyTestsListenerTrait class was dropped
  • added a CoverageListener to enhance the code coverage report
  • all deprecations but those from tests marked with @group legacy are always displayed when not in weak mode

Bridge/Twig

  • added an only keyword to form_theme tag to disable usage of default themes when rendering a form
  • deprecated Symfony\Bridge\Twig\Form\TwigRenderer
  • deprecated DebugCommand::set/getTwigEnvironment. Pass an instance of Twig\Environment as first argument of the constructor instead
  • deprecated LintCommand::set/getTwigEnvironment. Pass an instance of Twig\Environment as first argument of the constructor instead
  • added stopwatch tag to time templates with the WebProfilerBundle

Bundle/FrameworkBundle

  • The default type option of the framework.workflows.* configuration entries is state_machine
  • removed AddConsoleCommandPass, AddConstraintValidatorsPass, AddValidatorInitializersPass, CompilerDebugDumpPass, ConfigCachePass, ControllerArgumentValueResolverPass, FormPass, PropertyInfoPass, RoutingResolverPass, SerializerPass, ValidateWorkflowsPass
  • made Translator::__construct() $defaultLocale argument required
  • removed SessionListener, TestSessionListener
  • Removed cache:clear warmup part along with the --no-optional-warmers option
  • Removed core form types services registration when unnecessary
  • Removed framework.serializer.cache option and serializer.mapping.cache.apc, serializer.mapping.cache.doctrine.apc services
  • Removed ConstraintValidatorFactory
  • Removed class parameters related to routing
  • Removed absolute template paths support in the template name parser
  • Removed support of the KERNEL_DIR environment variable with KernelTestCase::getKernelClass().
  • Removed the KernelTestCase::getPhpUnitXmlDir() and KernelTestCase::getPhpUnitCliConfigArgument() methods.
  • Removed the "framework.validation.cache" configuration option. Configure the "cache.validator" service under "framework.cache.pools" instead.
  • Removed PhpStringTokenParser, use Symfony\Component\Translation\Extractor\PhpStringTokenParser instead.
  • Removed PhpExtractor, use Symfony\Component\Translation\Extractor\PhpExtractor instead.
  • Removed the use_strict_mode session option, it's is now enabled by default
  • Added translator.default_path option and parameter
  • Session use_strict_mode is now enabled by default and the corresponding option has been deprecated
  • Made the cache:clear command to not clear "app" PSR-6 cache pools anymore, but to still clear "system" ones; use the cache:pool:clear command to clear "app" pools instead
  • Always register a minimalist logger that writes in stderr
  • Deprecated profiler.matcher option
  • Added support for EventSubscriberInterface on MicroKernelTrait
  • Removed doctrine/cache from the list of required dependencies in composer.json
  • Deprecated validator.mapping.cache.doctrine.apc service
  • The symfony/stopwatch dependency has been removed, require it via composer require symfony/stopwatch in your dev environment.
  • Deprecated using the KERNEL_DIR environment variable with KernelTestCase::getKernelClass().
  • Deprecated the KernelTestCase::getPhpUnitXmlDir() and KernelTestCase::getPhpUnitCliConfigArgument() methods.
  • Deprecated AddCacheClearerPass, use tagged iterator arguments instead.
  • Deprecated AddCacheWarmerPass, use tagged iterator arguments instead.
  • Deprecated TranslationDumperPass, use Symfony\Component\Translation\DependencyInjection\TranslationDumperPass instead
  • Deprecated TranslationExtractorPass, use Symfony\Component\Translation\DependencyInjection\TranslationExtractorPass instead
  • Deprecated TranslatorPass, use Symfony\Component\Translation\DependencyInjection\TranslatorPass instead
  • Added command attribute to the console.command tag which takes the command name as value, using it makes the command lazy
  • Added cache:pool:prune command to allow manual stale cache item pruning of supported PSR-6 and PSR-16 cache pool implementations
  • Deprecated Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader, use Symfony\Component\Translation\Reader\TranslationReader instead
  • Deprecated translation.loader service, use translation.reader instead
  • AssetsInstallCommand::__construct() now takes an instance of Symfony\Component\Filesystem\Filesystem as first argument
  • CacheClearCommand::__construct() now takes an instance of Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface as first argument
  • CachePoolClearCommand::__construct() now takes an instance of Symfony\Component\HttpKernel\CacheClearer\Psr6CacheClearer as first argument
  • EventDispatcherDebugCommand::__construct() now takes an instance of Symfony\Component\EventDispatcher\EventDispatcherInterface as first argument
  • RouterDebugCommand::__construct() now takes an instance of Symfony\Component\Routing\RouterInterface as first argument
  • RouterMatchCommand::__construct() now takes an instance of Symfony\Component\Routing\RouterInterface as first argument
  • TranslationDebugCommand::__construct() now takes an instance of Symfony\Component\Translation\TranslatorInterface as first argument
  • TranslationUpdateCommand::__construct() now takes an instance of Symfony\Component\Translation\TranslatorInterface as first argument
  • AssetsInstallCommand, CacheClearCommand, CachePoolClearCommand, EventDispatcherDebugCommand, RouterDebugCommand, RouterMatchCommand, TranslationDebugCommand, TranslationUpdateCommand, XliffLintCommand and YamlLintCommand classes have been marked as final
  • Added asset.request_context.base_path and asset.request_context.secure parameters to provide a default request context in case the stack is empty (similar to router.request_context.* parameters)
  • Display environment variables managed by Dotenv in AboutCommand
  • allowed multiple IP addresses in profiler matcher settings
  • added stopwatch helper to time templates with the WebProfilerBundle
  • added service definition for "security.secure_random" service
  • added service definitions for the new Security CSRF sub-component

Bundle/SecurityBundle

  • removed FirewallContext::getContext()
  • made FirewallMap::$container and ::$map private
  • made the first UserPasswordEncoderCommand::_construct() argument mandatory
  • UserPasswordEncoderCommand does not extend ContainerAwareCommand anymore
  • removed support for voters that don't implement the VoterInterface
  • removed HTTP digest authentication
  • removed command acl:set along with SetAclCommand class
  • removed command init:acl along with InitAclCommand class
  • removed acl configuration key and related services, use symfony/acl-bundle instead
  • removed auto picking the first registered provider when no configured provider on a firewall and ambiguous
  • the firewall option logout_on_user_change is now always true, which will trigger a logout if the user changes between requests
  • the switch_user.stateless firewall option is true for stateless firewalls
  • Added new security.helper service that is an instance of Symfony\Component\Security\Core\Security and provides shortcuts for common security tasks.
  • Tagging voters with the security.voter tag without implementing the VoterInterface on the class is now deprecated and will be removed in 4.0.
  • [BC BREAK] FirewallContext::getListeners() now returns \Traversable|array
  • added info about called security listeners in profiler
  • Added logout_on_user_change to the firewall options. This config item will trigger a logout when the user has changed. Should be set to true to avoid deprecations in the configuration.
  • deprecated HTTP digest authentication
  • deprecated command acl:set along with SetAclCommand class
  • deprecated command init:acl along with InitAclCommand class
  • Added support for the new Argon2i password encoder
  • added stateless option to the switch_user listener
  • deprecated auto picking the first registered provider when no configured provider on a firewall and ambiguous
  • Added 'host' option to firewall configuration
  • Added 'csrf_token_generator' and 'csrf_token_id' options to firewall logout listener configuration to supersede/alias 'csrf_provider' and 'intention' respectively
  • Moved 'security.secure_random' service configuration to FrameworkBundle

Bundle/TwigBundle

  • removed ContainerAwareRuntimeLoader
  • added exclusive Twig namespace only for root bundles
  • deprecated Symfony\Bundle\TwigBundle\Command\DebugCommand, use Symfony\Bridge\Twig\Command\DebugCommand instead
  • deprecated relying on the ContainerAwareInterface implementation for Symfony\Bundle\TwigBundle\Command\LintCommand
  • added option to configure default path templates (via default_path)

Bundle/WebProfilerBundle

  • removed the WebProfilerExtension::dumpValue() method
  • removed the getTemplates() method of the TemplateManager class in favor of the getNames() method
  • removed the web_profiler.position config option and the web_profiler.debug_toolbar.position container parameter
  • Deprecated the web_profiler.position config option (in 4.0 version the toolbar will always be displayed at the bottom) and the web_profiler.debug_toolbar.position container parameter.

Bundle/WebServerBundle

  • WebServer can now use '*' as a wildcard to bind to 0.0.0.0 (INADDR_ANY)

Component/Asset

  • added optional arguments $basePath and $secure in RequestStackContext::__construct() to provide a default request context in case the stack is empty

Component/BrowserKit

  • [BC BREAK] Client will skip redirects during history navigation (back and forward calls) according to W3C Browsers recommendation

Component/Cache

  • added using options from Memcached DSN
  • added PruneableInterface so PSR-6 or PSR-16 cache implementations can declare support for manual stale cache pruning
  • added prune logic to FilesystemTrait, PhpFilesTrait, PdoTrait, TagAwareAdapter and ChainTrait
  • now FilesystemAdapter, PhpFilesAdapter, FilesystemCache, PhpFilesCache, PdoAdapter, PdoCache, ChainAdapter, and ChainCache implement PruneableInterface and support manual stale cache pruning

Component/Config

  • removed ConfigCachePass
  • added setDeprecated() method to indicate a deprecated node
  • added XmlUtils::parse() method to parse an XML string
  • deprecated ConfigCachePass

Component/Console

  • OutputFormatter throws an exception when unknown options are used
  • removed QuestionHelper::setInputStream()/getInputStream()
  • removed Application::getTerminalWidth()/getTerminalHeight() and Application::setTerminalDimensions()/getTerminalDimensions()
  • removed ConsoleExceptionEvent
  • removed ConsoleEvents::EXCEPTION
  • added SHELL_VERBOSITY env var to control verbosity
  • added CommandLoaderInterface, FactoryCommandLoader and PSR-11 ContainerCommandLoader for commands lazy-loading
  • added a case-insensitive command name matching fallback
  • added static Command::$defaultName/getDefaultName(), allowing for commands to be registered at compile time in the application command loader. Setting the $defaultName property avoids the need for filling the command attribute on the console.command tag when using AddConsoleCommandPass.
  • added a way to force terminal dimensions
  • added a convenient method to detect verbosity level
  • [BC BREAK] made descriptors use output instead of returning a string

Component/Debug

  • removed the symfony_debug extension
  • removed ContextErrorException
  • deprecated ErrorHandler::stackErrors() and ErrorHandler::unstackErrors()
  • added a DebugClassLoader able to wrap any autoloader providing a findFile method
  • improved error messages for not found classes and functions

Component/DependencyInjection

  • Relying on service auto-registration while autowiring is not supported anymore. Explicitly inject your dependencies or create services whose ids are their fully-qualified class name.
  • moved the ExtensionCompilerPass to before-optimization passes with priority -1000
  • deprecated "public-by-default" definitions and aliases, the new default will be "private" in 4.0
  • added EnvVarProcessorInterface and corresponding "container.env_var_processor" tag for processing env vars
  • added support for ignore-on-uninitialized references
  • deprecated service auto-registration while autowiring
  • deprecated the ability to check for the initialization of a private service with the Container::initialized() method
  • deprecated support for top-level anonymous services in XML
  • deprecated case insensitivity of parameter names
  • deprecated the ResolveDefinitionTemplatesPass class in favor of ResolveChildDefinitionsPass
  • added TaggedIteratorArgument with YAML (!tagged foo) and XML (<service type="tagged"/>) support
  • deprecated AutowireExceptionPass and AutowirePass::getAutowiringExceptions(), use Definition::addError() and the DefinitionErrorExceptionPass instead
  • added support for expressions in service definitions
  • added ContainerAwareTrait to add default container aware behavior to a class

Component/DomCrawler

  • Crawler::addXmlContent() removes the default document namespace again if it's an only namespace.
  • added support for automatic discovery and explicit registration of document namespaces for Crawler::filterXPath() and Crawler::filter()
  • improved content type guessing in Crawler::addContent()
  • [BC BREAK] Crawler::addXmlContent() no longer removes the default document namespace

Component/EventDispatcher

  • removed the ContainerAwareEventDispatcher class
  • added the reset() method to the TraceableEventDispatcherInterface
  • Implementing TraceableEventDispatcherInterface without the reset() method has been deprecated.

Component/ExpressionLanguage

  • the first argument of the ExpressionLanguage constructor must be an instance of CacheItemPoolInterface
  • removed the ArrayParserCache and ParserCacheAdapter classes
  • removed the ParserCacheInterface
  • added the component
  • added the component

Component/Filesystem

  • removed LockHandler
  • Support for passing relative paths to Filesystem::makePathRelative() has been removed.
  • support for passing relative paths to Filesystem::makePathRelative() is deprecated and will be removed in 4.0

Component/Finder

  • removed ExceptionInterface
  • removed Symfony\Component\Finder\Iterator\FilterIterator
  • deprecated Symfony\Component\Finder\Iterator\FilterIterator
  • added Finder::hasResults() method to check if any results were found

Component/Form

  • using the choices option in CountryType, CurrencyType, LanguageType, LocaleType, and TimezoneType when the choice_loader option is not null is not supported anymore and the configured choices will be ignored
  • callable strings that are passed to the options of the ChoiceType are treated as property paths
  • the choices_as_values option of the ChoiceType has been removed
  • removed the support for caching loaded choice lists in LazyChoiceList, cache the choice list in the used ChoiceLoaderInterface implementation instead
  • removed the support for objects implementing both \Traversable and \ArrayAccess in ResizeFormListener::preSubmit()
  • removed the ability to use FormDataCollector without the symfony/var-dumper component
  • removed passing a ValueExporter instance to the FormDataExtractor::__construct() method
  • removed passing guesser services ids as the fourth argument of DependencyInjectionExtension::__construct()
  • removed the ability to validate an unsubmitted form.
  • removed ChoiceLoaderInterface implementation in TimezoneType
  • added DebugCommand
  • deprecated ChoiceLoaderInterface implementation in TimezoneType
  • added options "input" and "regions" to TimezoneType
  • added an option to Symfony\Component\Form\FormRendererEngineInterface::setTheme() and Symfony\Component\Form\FormRendererInterface::setTheme() to disable usage of default themes when rendering a form
  • moved CSRF implementation to the new Security CSRF sub-component
  • deprecated CsrfProviderInterface and its implementations
  • deprecated options "csrf_provider" and "intention" in favor of the new options "csrf_token_manager" and "csrf_token_id"

Component/HttpFoundation

  • the Request::setTrustedHeaderName() and Request::getTrustedHeaderName() methods have been removed
  • the Request::HEADER_CLIENT_IP constant has been removed, use Request::HEADER_X_FORWARDED_FOR instead
  • the Request::HEADER_CLIENT_HOST constant has been removed, use Request::HEADER_X_FORWARDED_HOST instead
  • the Request::HEADER_CLIENT_PROTO constant has been removed, use Request::HEADER_X_FORWARDED_PROTO instead
  • the Request::HEADER_CLIENT_PORT constant has been removed, use Request::HEADER_X_FORWARDED_PORT instead
  • checking for cacheable HTTP methods using the Request::isMethodSafe() method (by not passing false as its argument) is not supported anymore and throws a \BadMethodCallException
  • the WriteCheckSessionHandler, NativeSessionHandler and NativeProxy classes have been removed
  • setting session save handlers that do not implement \SessionHandlerInterface in NativeSessionStorage::setSaveHandler() is not supported anymore and throws a \TypeError
  • implemented PHP 7.0's SessionUpdateTimestampHandlerInterface with a new AbstractSessionHandler base class and a new StrictSessionHandler wrapper
  • deprecated the WriteCheckSessionHandler, NativeSessionHandler and NativeProxy classes
  • deprecated setting session save handlers that do not implement \SessionHandlerInterface in NativeSessionStorage::setSaveHandler()
  • deprecated using MongoDbSessionHandler with the legacy mongo extension; use it with the mongodb/mongodb package and ext-mongodb instead
  • deprecated MemcacheSessionHandler; use MemcachedSessionHandler instead
  • added RequestStack
  • added Request::getEncodings()
  • added accessors methods to session handlers

Component/HttpKernel

  • removed the DataCollector::varToString() method, use DataCollector::cloneVar() instead
  • using the DataCollector::cloneVar() method requires the VarDumper component
  • removed the ValueExporter class
  • removed ControllerResolverInterface::getArguments()
  • removed TraceableControllerResolver::getArguments()
  • removed ControllerResolver::getArguments() and the ability to resolve arguments
  • removed the argument_resolver service dependency from the debug.controller_resolver
  • removed LazyLoadingFragmentHandler::addRendererService()
  • removed Psr6CacheClearer::addPool()
  • removed Extension::addClassesToCompile() and Extension::getClassesToCompile()
  • removed Kernel::loadClassCache(), Kernel::doLoadClassCache(), Kernel::setClassCache(), and Kernel::getEnvParameters()
  • support for the X-Status-Code when handling exceptions in the HttpKernel has been dropped, use the HttpKernel::allowCustomResponseCode() method instead
  • removed convention-based commands registration
  • removed the ChainCacheClearer::add() method
  • removed the CacheaWarmerAggregate::add() and setWarmers() methods
  • made CacheWarmerAggregate and ChainCacheClearer classes final
  • added a minimalist PSR-3 Logger class that writes in stderr
  • made kernels implementing CompilerPassInterface able to process the container
  • deprecated bundle inheritance
  • added RebootableInterface and implemented it in Kernel
  • deprecated commands auto registration
  • deprecated EnvParametersResource
  • added Symfony\Component\HttpKernel\Client::catchExceptions()
  • deprecated the ChainCacheClearer::add() method
  • deprecated the CacheaWarmerAggregate::add() and setWarmers() methods
  • made CacheWarmerAggregate and ChainCacheClearer classes final
  • added the possibility to reset the profiler to its initial state
  • deprecated data collectors without a reset() method
  • deprecated implementing DebugLoggerInterface without a clear() method
  • added event listeners for the session
  • added the KernelEvents::FINISH_REQUEST event

Component/Ldap

  • removed the LdapClient class and the LdapClientInterface
  • removed the RenameEntryInterface interface and merged with EntryManagerInterface

Component/Lock

  • added the component

Component/OptionsResolver

  • added OptionsResolverIntrospector to inspect options definitions inside an OptionsResolver instance
  • added array of types support in allowed types (e.g int[])

Component/Process

  • environment variables will always be inherited
  • added a second array $env = array() argument to the start(), run(), mustRun(), and restart() methods of the Process class
  • added a second array $env = array() argument to the start() method of the PhpProcess class
  • the ProcessUtils::escapeArgument() method has been removed
  • the areEnvironmentVariablesInherited(), getOptions(), and setOptions() methods of the Process class have been removed
  • support for passing proc_open() options has been removed
  • removed the ProcessBuilder class, use the Process class instead
  • removed the getEnhanceWindowsCompatibility() and setEnhanceWindowsCompatibility() methods of the Process class
  • passing a not existing working directory to the constructor of the Symfony\Component\Process\Process class is not supported anymore
  • deprecated the ProcessBuilder class
  • deprecated calling Process::start() without setting a valid working directory beforehand (via setWorkingDirectory() or constructor)
  • added the ability to define an idle timeout

Component/PropertyAccess

  • removed the StringUtil class, use Symfony\Component\Inflector\Inflector

Component/Routing

  • dropped support for using UTF-8 route patterns without using the utf8 option
  • dropped support for using UTF-8 route requirements without using the utf8 option
  • Added NoConfigurationException.
  • Added the possibility to define a prefix for all routes of a controller via @Route(name="prefix_")
  • Added support for prioritized routing loaders.
  • Add matched and default parameters to redirect responses
  • Added support for a controller keyword for configuring route controllers in YAML and XML configurations.

Component/Security

  • The AbstractFormLoginAuthenticator::onAuthenticationSuccess() was removed. You should implement this method yourself in your concrete authenticator.
  • removed the AccessDecisionManager::setVoters() method
  • removed the RoleInterface
  • removed support for voters that don't implement the VoterInterface
  • added a sixth string $context argument to LogoutUrlGenerator::registerListener()
  • removed HTTP digest authentication
  • removed GuardAuthenticatorInterface in favor of AuthenticatorInterface
  • removed AbstractGuardAuthenticator::supports()
  • Added getUser, getToken and isGranted methods to Security.
  • added a setToken() method to the SwitchUserEvent class to allow to replace the created token while switching users when custom token generation is required by application.
  • Using voters that do not implement the VoterInterfaceis now deprecated in the AccessDecisionManager and this functionality will be removed in 4.0.
  • Using the ContextListener without setting the logoutOnUserChange property will trigger a deprecation when the user has changed. As of 4.0 the user will always be logged out when the user has changed between requests.
  • deprecated HTTP digest authentication
  • Added a new password encoder for the Argon2i hashing algorithm
  • deprecated GuardAuthenticatorInterface in favor of AuthenticatorInterface
  • deprecated to return null from getCredentials() in classes that extend AbstractGuardAuthenticator. Return false from supports() instead.
  • Translations in the src/Symfony/Component/Security/Resources/translations/ directory are deprecated, ones in src/Symfony/Component/Security/Core/Resources/translations/ must be used instead.
  • The switch user listener now preserves the query string when switching a user
  • The remember-me cookie hashes now use HMAC, which means that current cookies will be invalidated
  • added simpler customization options
  • structured component into three sub-components Acl, Core and Http
  • added Csrf sub-component
  • changed Http sub-component to depend on Csrf sub-component instead of the Form component

Component/Serializer

  • removed the SerializerAwareEncoder and SerializerAwareNormalizer classes, use the SerializerAwareTrait instead
  • removed the Serializer::$normalizerCache and Serializer::$denormalizerCache properties
  • added an optional string $format = null argument to AbstractNormalizer::instantiateObject
  • added an optional array $context = array() to Serializer::supportsNormalization, Serializer::supportsDenormalization, Serializer::supportsEncoding and Serializer::supportsDecoding
  • added AbstractObjectNormalizer::DISABLE_TYPE_ENFORCEMENT context option to disable throwing an UnexpectedValueException on a type mismatch
  • added support for serializing DateInterval objects
  • added getter for extra attributes in ExtraAttributesException
  • improved CsvEncoder to handle variable nested structures
  • CSV headers can be passed to the CsvEncoder via the csv_headers serialization context variable
  • added $context when checking for encoding, decoding and normalizing in Serializer
  • added $context support for XMLEncoder.
  • [DEPRECATION] JsonEncode and JsonDecode where modified to throw an exception if error found. No need for get*Error() functions

Component/Stopwatch

  • added the Stopwatch::reset() method
  • allowed to measure sub-millisecond times by introducing an argument to the constructor of Stopwatch

Component/Translation

  • removed the backup feature of the FileDumper class
  • removed TranslationWriter::writeTranslations() method
  • removed support for passing MessageSelector instances to the constructor of the Translator class
  • Added TranslationDumperPass
  • Added TranslationExtractorPass
  • Added TranslatorPass
  • Added TranslationReader and TranslationReaderInterface
  • Added <notes> section to the Xliff 2.0 dumper.
  • Improved Xliff 2.0 loader to load <notes> section.
  • Added TranslationWriterInterface
  • Deprecated TranslationWriter::writeTranslations in favor of TranslationWriter::write
  • added support for adding custom message formatter and decoupling the default one.
  • Added PhpExtractor
  • Added PhpStringTokenParser

Component/Validator

  • Setting the strict option of the Choice constraint to anything but true is not supported anymore.
  • removed the DateTimeValidator::PATTERN constant
  • removed the AbstractConstraintValidatorTest class
  • removed support for setting the checkDNS option of the Url constraint to true
  • added support for validation groups to the Valid constraint
  • not setting the strict option of the Choice constraint to true is deprecated and will throw an exception in Symfony 4.0
  • setting the checkDNS option of the Url constraint to true is deprecated in favor of the Url::CHECK_DNS_TYPE_* constants values and will throw an exception in Symfony 4.0
  • added min/max amount of pixels check to Image constraint via minPixels and maxPixels
  • added a new "propertyPath" option to comparison constraints in order to get the value to compare from an array or object
  • added a constraint the uses the expression language
  • added minRatio, maxRatio, allowSquare, allowLandscape, and allowPortrait to Image validator

Component/VarDumper

  • support for passing \ReflectionClass instances to the Caster::castObject() method has been dropped, pass class names as strings instead
  • the Data::getRawData() method has been removed
  • the VarDumperTestTrait::assertDumpEquals() method expects a 3rd $context = null argument and moves $message = '' argument at 4th position.
  • the VarDumperTestTrait::assertDumpMatchesFormat() method expects a 3rd $context = null argument and moves $message = '' argument at 4th position.
  • added AbstractCloner::setMinDepth() function to ensure minimum tree depth
  • deprecated MongoCaster

Component/Workflow

  • Removed class name support in WorkflowRegistry::add() as second parameter.
  • Added guard is_valid() method support.
  • Added support for Event::getWorkflowName() for "announce" events.
  • Added workflow.completed events which are fired after a transition is completed.

Component/Yaml

  • The behavior of the non-specific tag ! is changed and now forces non-evaluating your values.
  • complex mappings will throw a ParseException
  • support for the comma as a group separator for floats has been dropped, use the underscore instead
  • support for the !!php/object tag has been dropped, use the !php/object tag instead
  • duplicate mapping keys throw a ParseException
  • non-string mapping keys throw a ParseException, use the Yaml::PARSE_KEYS_AS_STRINGS flag to cast them to strings
  • % at the beginning of an unquoted string throw a ParseException
  • mappings with a colon (:) that is not followed by a whitespace throw a ParseException
  • the Dumper::setIndentation() method has been removed
  • being able to pass boolean options to the Yaml::parse(), Yaml::dump(), Parser::parse(), and Dumper::dump() methods to configure the behavior of the parser and dumper is no longer supported, pass bitmask flags instead
  • the constructor arguments of the Parser class have been removed
  • the Inline class is internal and no longer part of the BC promise
  • removed support for the !str tag, use the !!str tag instead
  • added support for tagged scalars.
  • added support for parsing YAML files using the Yaml::parseFile() or Parser::parseFile() method

Bridge/Doctrine

  • added support for datetime immutable types in form type guesser

Bridge/Monolog

  • WebProcessor now implements EventSubscriberInterface in order to be easily autoconfigured

Bridge/PhpUnit

  • Search for SYMFONY_PHPUNIT_VERSION, SYMFONY_PHPUNIT_REMOVE, SYMFONY_PHPUNIT_DIR env var in phpunit.xml then in phpunit.xml.dist

Bridge/Twig

  • add a workflow_metadata function

Bundle/DebugBundle

  • Added the server:dump command to run a server collecting and displaying dumps on a single place with multiple formats support

Bundle/FrameworkBundle

  • Allowed to pass an optional LoggerInterface $logger instance to the Router
  • Added a new parameter_bag service with related autowiring aliases to access parameters as-a-service
  • Allowed the Router to work with any PSR-11 container
  • Added option in workflow dump command to label graph with a custom label
  • Using a RouterInterface that does not implement the WarmableInterface is deprecated.
  • Warming up a router in RouterCacheWarmer that does not implement the WarmableInterface is deprecated and will not be supported anymore in 5.0.
  • The RequestDataCollector class has been deprecated. Use the Symfony\Component\HttpKernel\DataCollector\RequestDataCollector class instead.
  • The RedirectController class allows for 307/308 HTTP status codes
  • Deprecated bundle:controller:action syntax to reference controllers. Use serviceOrFqcn::method instead where serviceOrFqcn is either the service ID or the FQCN of the controller.
  • Deprecated Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser
  • The container.service_locator tag of ServiceLocators is now autoconfigured.
  • Add the ability to search a route in debug:router.

Bundle/SecurityBundle

  • The logout_on_user_change firewall option is deprecated.
  • deprecated SecurityUserValueResolver, use Symfony\Component\Security\Http\Controller\UserValueResolver instead.

Bundle/TwigBundle

  • added priority to Twig extensions
  • deprecated relying on the default value (false) of the twig.strict_variables configuration option. The %kernel.debug% parameter will be the new default in 5.0

Bundle/WebProfilerBundle

  • added information about orphaned events
  • made the toolbar auto-update with info from ajax reponses when they set the Symfony-Debug-Toolbar-Replace header to 1

Component/Config

  • added setPathSeparator method to NodeBuilder class
  • added third $pathSeparator constructor argument to BaseNode
  • the Processor class has been made final

Component/Console

  • added option to run suggested command if command is not found and only 1 alternative is available
  • added option to modify console output and print multiple modifiable sections
  • added support for iterable messages in output write and writeln methods

Component/DependencyInjection

  • added support for variadics in named arguments
  • added PSR-11 ContainerBagInterface and its ContainerBag implementation to access parameters as-a-service
  • added support for service's decorators autowiring
  • deprecated the TypedReference::canBeAutoregistered() and TypedReference::getRequiringClass() methods
  • environment variables are validated when used in extension configuration
  • deprecated support for auto-discovered extension configuration class which does not implement ConfigurationInterface

Component/EventDispatcher

  • added support for invokable event listeners tagged with kernel.event_listener by default
  • The TraceableEventDispatcher::getOrphanedEvents() method has been added.
  • The TraceableEventDispatcherInterface has been deprecated.

Component/Form

  • added input=datetime_immutable to DateType, TimeType, DateTimeType
  • added rounding_mode option to MoneyType
  • added choice_translation_locale option to CountryType, LanguageType, LocaleType and CurrencyType
  • deprecated the ChoiceLoaderInterface implementation in CountryType, LanguageType, LocaleType and CurrencyType
  • added input=datetime_immutable to DateType, TimeType, DateTimeType
  • added rounding_mode option to MoneyType

Component/HttpFoundation

  • Query string normalization uses parse_str() instead of custom parsing logic.
  • Passing the file size to the constructor of the UploadedFile class is deprecated.
  • The getClientSize() method of the UploadedFile class is deprecated. Use getSize() instead.
  • added RedisSessionHandler to use Redis as a session storage
  • The get() method of the AcceptHeader class now takes into account the * and */* default values (if they are present in the Accept HTTP header) when looking for items.
  • deprecated Request::getSession() when no session has been set. Use Request::hasSession() instead.
  • added CannotWriteFileException, ExtensionFileException, FormSizeFileException, IniSizeFileException, NoFileException, NoTmpDirFileException, PartialFileException to handle failed UploadedFile.
  • added MigratingSessionHandler for migrating between two session handlers without losing sessions
  • added HeaderUtils.

Component/HttpKernel

  • added orphaned events support to EventDataCollector
  • ExceptionListener now logs exceptions at priority 0 (previously logged at -128)
  • Added support for using service::method to reference controllers, making it consistent with other cases. It is recommended over the service:action syntax with a single colon, which will be deprecated in the future.
  • Added the ability to profile individual argument value resolvers via the Symfony\Component\HttpKernel\Controller\ArgumentResolver\TraceableValueResolver

Component/Ldap

  • Added support for adding values to multi-valued attributes
  • Added support for removing values from multi-valued attributes

Component/Process

  • added the Process::isTtySupported() method that allows to check for TTY support
  • made PhpExecutableFinder look for the PHP_BINARY env var when searching the php binary
  • added the ProcessSignaledException class to properly catch signaled process errors

Component/Security

  • The ContextListener::setLogoutOnUserChange() method is deprecated.
  • added UserValueResolver.
  • Using the AdvancedUserInterface is now deprecated. To use the existing functionality, create a custom user-checker based on the Symfony\Component\Security\Core\User\UserChecker.
  • AuthenticationUtils::getLastUsername() now always returns a string.

Component/Serializer

  • added CacheableSupportsMethodInterface for normalizers and denormalizers that use only the type and the format in their supports*() methods
  • added MissingConstructorArgumentsException new exception for deserialization failure of objects that needs data insertion in constructor
  • added an optional default_constructor_arguments option of context to specify a default data in case the object is not initializable by its constructor because of data missing
  • added optional bool $escapeFormulas = false argument to CsvEncoder::__construct
  • added AbstractObjectNormalizer::setMaxDepthHandler to set a handler to call when the configured maximum depth is reached
  • added optional int[] $ignoredNodeTypes argument to XmlEncoder::__construct. XML decoding now ignores comment node types by default.
  • added ConstraintViolationListNormalizer

Component/Translation

  • The FileDumper::setBackup() method is deprecated.
  • The TranslationWriter::disableBackup() method is deprecated.
  • The XliffFileDumper will write "name" on the "unit" node when dumping XLIFF 2.0.

Component/Validator

  • Deprecated the checkDNS and dnsMessage options of the Url constraint.
  • added a values option to the Expression constraint
  • Deprecated use of Locale constraint without setting true at "canonicalize" option, which will be the default value in 5.0

Component/VarDumper

  • added a ServerDumper to send serialized Data clones to a server
  • added a ServerDumpCommand and DumpServer to run a server collecting and displaying dumps on a single place with multiple formats support
  • added CliDescriptor and HtmlDescriptor descriptors for server:dump CLI and HTML formats support

Component/Workflow

  • Deprecated the DefinitionBuilder::reset() method, use the clear() one instead.
  • Deprecated the usage of add(Workflow $workflow, $supportStrategy) in Workflow/Registry, use addWorkflow(WorkflowInterface, $supportStrategy) instead.
  • Deprecated the usage of SupportStrategyInterface, use WorkflowSupportStrategyInterface instead.
  • The Workflow class now implements WorkflowInterface.
  • Deprecated the class ClassInstanceSupportStrategy in favor of the class InstanceOfSupportStrategy.
  • Added TransitionBlockers as a way to pass around reasons why exactly transitions can't be made.
  • Added a MetadataStore.
  • Added Registry::all to return all the workflows associated with the specific subject.

Bridge/Doctrine

  • deprecated injecting ClassMetadataFactory in DoctrineExtractor, an instance of EntityManagerInterface should be injected instead
  • added support for simple_array type
  • the DoctrineTransactionMiddlewareFactory class has been removed

Bridge/Monolog

  • The methods DebugProcessor::getLogs(), DebugProcessor::countErrors(), Logger::getLogs() and Logger::countErrors() will have a new $request argument in version 5.0, not defining it is deprecated

Bridge/ProxyManager

  • allowed creating lazy-proxies from interfaces

Bridge/Twig

  • add bundle name suggestion on wrongly overridden templates paths
  • added name argument in debug:twig command and changed filter argument as --filter option
  • deprecated the transchoice tag and filter, use the trans ones instead with a %count% parameter

Bundle/FrameworkBundle

  • Added a AbstractController::addLink() method to add Link headers to the current response
  • Allowed configuring taggable cache pools via a new framework.cache.pools.tags option (bool|service-id)
  • Allowed configuring PDO-based cache pools via a new cache.adapter.pdo abstract service
  • Deprecated auto-injection of the container in AbstractController instances, register them as service subscribers instead
  • Deprecated processing of services tagged security.expression_language_provider in favor of a new AddExpressionLanguageProvidersPass in SecurityBundle.
  • Deprecated the Symfony\Bundle\FrameworkBundle\Controller\Controller class in favor of Symfony\Bundle\FrameworkBundle\Controller\AbstractController.
  • Enabled autoconfiguration for Psr\Log\LoggerAwareInterface
  • Added new "auto" mode for framework.session.cookie_secure to turn it on when HTTPS is used
  • Removed the framework.messenger.encoder and framework.messenger.decoder options. Use the framework.messenger.serializer.id option to replace the Messenger serializer.
  • Deprecated the ContainerAwareCommand class in favor of Symfony\Component\Console\Command\Command
  • Made debug:container and debug:autowiring ignore backslashes in service ids
  • Deprecated the Templating\Helper\TranslatorHelper::transChoice() method, use the trans() one instead with a %count% parameter
  • Deprecated CacheCollectorPass. Use Symfony\Component\Cache\DependencyInjection\CacheCollectorPass instead.
  • Deprecated CachePoolClearerPass. Use Symfony\Component\Cache\DependencyInjection\CachePoolClearerPass instead.
  • Deprecated CachePoolPass. Use Symfony\Component\Cache\DependencyInjection\CachePoolPass instead.
  • Deprecated CachePoolPrunerPass. Use Symfony\Component\Cache\DependencyInjection\CachePoolPrunerPass instead.
  • Deprecated support for legacy translations directories src/Resources/translations/ and src/Resources/<BundleName>/translations/, use translations/ instead.
  • Deprecated support for the legacy directory structure in translation:update and debug:translation commands.

Bundle/SecurityBundle

  • Using the security.authentication.trust_resolver.anonymous_class and security.authentication.trust_resolver.rememberme_class parameters to define the token classes is deprecated. To use custom tokens extend the existing Symfony\Component\Security\Core\Authentication\Token\AnonymousToken. or Symfony\Component\Security\Core\Authentication\Token\RememberMeToken.
  • Added Symfony\Bundle\SecurityBundle\DependencyInjection\Compiler\AddExpressionLanguageProvidersPass
  • Added json_login_ldap authentication provider to use LDAP authentication with a REST API.
  • Made remember-me cookies inherit their default config from framework.session.cookie_* and added an "auto" mode to their "secure" config option to make them secure on HTTPS automatically.
  • Deprecated the simple_form and simple_preauth authentication listeners, use Guard instead.
  • Deprecated the SimpleFormFactory and SimplePreAuthenticationFactory classes, use Guard instead.
  • Added port in access_control
  • Added individual voter decisions to the profiler

4.1.0

Bundle/TwigBundle

  • deprecated support for legacy templates directories src/Resources/views/ and src/Resources/<BundleName>/views/, use templates/ and templates/bundles/<BundleName>/ instead.

Bundle/WebServerBundle

  • Added ability to display the current hostname address if available when binding to 0.0.0.0

Component/Asset

  • added different protocols to be allowed as asset base_urls

Component/BrowserKit

  • The method Client::submit() will have a new $serverParameters argument in version 5.0, not defining it is deprecated
  • Added ability to read the "samesite" attribute of cookies using Cookie::getSameSite()

Component/Cache

  • added support for connecting to Redis clusters via DSN
  • added support for configuring multiple Memcached servers via DSN
  • added MarshallerInterface and DefaultMarshaller to allow changing the serializer and provide one that automatically uses igbinary when available
  • implemented CacheInterface, which provides stampede protection via probabilistic early expiration and should become the preferred way to use a cache
  • added sub-second expiry accuracy for backends that support it
  • added support for phpredis 4 compression and tcp_keepalive options
  • added automatic table creation when using Doctrine DBAL with PDO-based backends
  • throw LogicException when CacheItem::tag() is called on an item coming from a non tag-aware pool
  • deprecated CacheItem::getPreviousTags(), use CacheItem::getMetadata() instead
  • deprecated the AbstractAdapter::unserialize() and AbstractCache::unserialize() methods
  • added CacheCollectorPass (originally in FrameworkBundle)
  • added CachePoolClearerPass (originally in FrameworkBundle)
  • added CachePoolPass (originally in FrameworkBundle)
  • added CachePoolPrunerPass (originally in FrameworkBundle)

Component/Config

  • deprecated constructing a TreeBuilder without passing root node information
  • renamed FileLoaderLoadException to LoaderLoadException

Component/Console

  • allowed passing commands as [$process, 'ENV_VAR' => 'value'] to ProcessHelper::run() to pass environment variables
  • deprecated passing a command as a string to ProcessHelper::run(), pass it the command as an array of its arguments instead
  • made the ProcessHelper class final
  • added WrappableOutputFormatterInterface::formatAndWrap() (implemented in OutputFormatter)
  • added capture_stderr_separately option to CommandTester::execute()

Component/DependencyInjection

  • added ContainerBuilder::registerAliasForArgument() to support autowiring by type+name
  • added support for binding by type+name
  • added ServiceSubscriberTrait to ease implementing ServiceSubscriberInterface using methods' return types
  • added ServiceLocatorArgument and !service_locator config tag for creating optimized service-locators
  • added support for autoconfiguring bindings
  • added %env(key:...)% processor to fetch a specific key from an array
  • deprecated ServiceSubscriberInterface, use the same interface from the Symfony\Contracts\Service namespace instead
  • deprecated ResettableContainerInterface, use Symfony\Contracts\Service\ResetInterface instead

Component/DomCrawler

  • The $currentUri constructor argument of the AbstractUriElement, Link and Image classes is now optional.
  • The Crawler::children() method will have a new $selector argument in version 5.0, not defining it is deprecated.

Component/Dotenv

  • added Dotenv::overload() and $overrideExistingVars as optional parameter of Dotenv::populate()
  • added Dotenv::loadEnv() to load a .env file and its corresponding .env.local, .env.$env and .env.$env.local files if they exist

Component/Finder

  • added $useNaturalSort option to Finder::sortByName() method
  • the Finder::sortByName() method will have a new $useNaturalSort argument in version 5.0, not defining it is deprecated
  • added Finder::reverseSorting() to reverse the sorting

Component/Form

  • The getExtendedType() method of the FormTypeExtensionInterface is deprecated and will be removed in 5.0. Type extensions must implement the static getExtendedTypes() method instead and return an iterable of extended types.

Component/HttpFoundation

  • the default value of the "$secure" and "$samesite" arguments of Cookie's constructor will respectively change from "false" to "null" and from "null" to "lax" in Symfony 5.0, you should define their values explicitly or use "Cookie::create()" instead.
  • added matchPort() in RequestMatcher

Component/HttpKernel

  • deprecated KernelInterface::getRootDir() and the kernel.root_dir parameter
  • deprecated KernelInterface::getName() and the kernel.name parameter
  • deprecated the first and second constructor argument of ConfigDataCollector
  • deprecated ConfigDataCollector::getApplicationName()
  • deprecated ConfigDataCollector::getApplicationVersion()

Component/Intl

  • excluded language codes mis, mul, und and zxx

Component/Ldap

  • added EntryManager::applyOperations
  • Added timeout option to ConnectionOptions

Component/Lock

  • added the PDO Store
  • added a new Zookeeper Data Store for Lock Component

Component/Messenger

  • Added HandleTrait leveraging a message bus instance to return a single synchronous message handling result
  • Added HandledStamp & SentStamp stamps
  • All the changes below are BC BREAKS
  • Senders and handlers subscribing to parent interfaces now receive all matching messages, wildcard included
  • MessageBusInterface::dispatch(), MiddlewareInterface::handle() and SenderInterface::send() return Envelope
  • MiddlewareInterface::handle() now require an Envelope as first argument and a StackInterface as second
  • EnvelopeAwareInterface has been removed
  • The signature of Amqp* classes changed to take a Connection as a first argument and an optional Serializer as a second argument.
  • MessageSubscriberInterface::getHandledMessages() return value has changed. The value of an array item needs to be an associative array or the method name.
  • StampInterface replaces EnvelopeItemInterface and doesn't extend Serializable anymore
  • The ConsumeMessagesCommand class now takes an instance of Psr\Container\ContainerInterface as first constructor argument
  • The EncoderInterface and DecoderInterface have been replaced by a unified Symfony\Component\Messenger\Transport\Serialization\SerializerInterface.
  • Renamed EnvelopeItemInterface to StampInterface
  • Envelope's constructor and with() method now accept StampInterface objects as variadic parameters
  • Renamed and moved ReceivedMessage, ValidationConfiguration and SerializerConfiguration in the Stamp namespace
  • Removed the WrapIntoReceivedMessage class
  • MessengerDataCollector::getMessages() returns an iterable, not just an array anymore
  • HandlerLocatorInterface::resolve() has been removed, use HandlersLocator::getHandlers() instead
  • SenderLocatorInterface::getSenderForMessage() has been removed, use SendersLocator::getSenders() instead
  • Classes in the Middleware\Enhancers sub-namespace have been moved to the Middleware one
  • Classes in the Asynchronous\Routing sub-namespace have been moved to the Transport\Sender\Locator sub-namespace
  • The Asynchronous/Middleware/SendMessageMiddleware class has been moved to the Middleware namespace
  • SenderInterface has been moved to the Transport\Sender sub-namespace
  • The ChainHandler and ChainSender classes have been removed
  • ReceiverInterface and its implementations have been moved to the Transport\Receiver sub-namespace
  • ActivationMiddlewareDecorator has been renamed ActivationMiddleware
  • AllowNoHandlerMiddleware has been removed in favor of a new constructor argument on HandleMessageMiddleware
  • The ContainerHandlerLocator, AbstractHandlerLocator, SenderLocator and AbstractSenderLocator classes have been removed
  • Envelope::all() takes a new optional $stampFqcn argument and returns the stamps for the specified FQCN, or all stamps by their class name
  • Envelope::get() has been renamed Envelope::last()

Component/OptionsResolver

  • added support for nested options definition
  • added setDeprecated and isDeprecated methods

Component/Process

  • added the Process::fromShellCommandline() to run commands in a shell wrapper
  • deprecated passing a command as string when creating a Process instance
  • deprecated the Process::setCommandline() and the PhpProcess::setPhpBinary() methods
  • added the Process::waitUntil() method to wait for the process only for a specific output, then continue the normal execution of your application

Component/PropertyInfo

  • added PropertyInitializableExtractorInterface to test if a property can be initialized through the constructor (implemented by ReflectionExtractor)

Component/Routing

  • added fallback to cultureless locale for internationalized routes

Component/Security

  • added the is_granted() function in security expressions
  • deprecated the has_role() function in security expressions, use is_granted() instead
  • Passing custom class names to the Symfony\Component\Security\Core\Authentication\AuthenticationTrustResolver to define custom anonymous and remember me token classes is deprecated. To use custom tokens, extend the existing Symfony\Component\Security\Core\Authentication\Token\AnonymousToken or Symfony\Component\Security\Core\Authentication\Token\RememberMeToken.
  • allow passing null as $filter in LdapUserProvider to get the default filter
  • accessing the user object that is not an instance of UserInterface from Security::getUser() is deprecated
  • Deprecated SimpleAuthenticatorInterface, SimpleFormAuthenticatorInterface, SimplePreAuthenticatorInterface, SimpleAuthenticationProvider, SimpleAuthenticationHandler, SimpleFormAuthenticationListener and SimplePreAuthenticationListener. Use Guard instead.

Component/Serializer

  • using the default context is the new recommended way to configure normalizers and encoders
  • added a skip_null_values context option to not serialize properties with a null values
  • AbstractNormalizer::handleCircularReference is now final and receives two optional extra arguments: the format and the context
  • added support for XML comment encoding (encoding ['#comment' => ' foo '] results <!-- foo -->)
  • added optional int[] $encoderIgnoredNodeTypes argument to XmlEncoder::__construct to configure node types to be ignored during encoding
  • added AdvancedNameConverterInterface to access the class, the format and the context in a name converter
  • the AbstractNormalizer::handleCircularReference() method will have two new $format and $context arguments in version 5.0, not defining them is deprecated
  • deprecated creating a Serializer with normalizers which do not implement either NormalizerInterface or DenormalizerInterface
  • deprecated creating a Serializer with normalizers which do not implement either NormalizerInterface or DenormalizerInterface
  • deprecated creating a Serializer with encoders which do not implement either EncoderInterface or DecoderInterface
  • added the optional $objectClassResolver argument in AbstractObjectNormalizer and ObjectNormalizer constructor
  • added MetadataAwareNameConverter to configure the serialized name of properties through metadata
  • YamlEncoder now handles the .yml extension too
  • AbstractNormalizer::$circularReferenceLimit, AbstractNormalizer::$circularReferenceHandler, AbstractNormalizer::$callbacks, AbstractNormalizer::$ignoredAttributes, AbstractNormalizer::$camelizedAttributes, AbstractNormalizer::setCircularReferenceLimit(), AbstractNormalizer::setCircularReferenceHandler(), AbstractNormalizer::setCallbacks() and AbstractNormalizer::setIgnoredAttributes() are deprecated, use the default context instead.
  • AbstractObjectNormalizer::$maxDepthHandler and AbstractObjectNormalizer::setMaxDepthHandler() are deprecated, use the default context instead.
  • passing configuration options directly to the constructor of CsvEncoder, JsonDecode and XmlEncoder is deprecated since Symfony 4.2, use the default context instead.

Component/Translation

  • Started using ICU parent locales as fallback locales.
  • allow using the ICU message format using domains with the "+intl-icu" suffix
  • deprecated Translator::transChoice() in favor of using Translator::trans() with a %count% parameter
  • deprecated TranslatorInterface in favor of Symfony\Contracts\Translation\TranslatorInterface
  • deprecated MessageSelector, Interval and PluralizationRules; use IdentityTranslator instead
  • Added IntlFormatter and IntlFormatterInterface
  • added support for multiple files and directories in XliffLintCommand
  • Marked Translator::getFallbackLocales() and TranslationDataCollector::getFallbackLocales() as internal

Component/Validator

  • added a new UnexpectedValueException that can be thrown by constraint validators, these exceptions are caught by the validator and are converted into constraint violations
  • added DivisibleBy constraint
  • decoupled from symfony/translation by using Symfony\Contracts\Translation\TranslatorInterface
  • deprecated ValidatorBuilderInterface
  • made ValidatorBuilder::setTranslator() final
  • marked format the default option in DateTime constraint
  • deprecated validating instances of \DateTimeInterface in DateTimeValidator, DateValidator and TimeValidator.
  • deprecated using the Bic, Country, Currency, Language and Locale constraints without symfony/intl
  • deprecated using the Email constraint without egulias/email-validator
  • deprecated using the Expression constraint without symfony/expression-language

Component/VarDumper

  • support selecting the format to use by setting the environment variable VAR_DUMPER_FORMAT to html or cli

Component/VarExporter

  • added the component

Component/Yaml

  • added support for multiple files or directories in LintCommand

Bridge/Doctrine

  • changed guessing of DECIMAL to set the input option of NumberType to string
  • deprecated not passing an IdReader to the DoctrineChoiceLoader when query can be optimized with a single id field
  • deprecated passing an IdReader to the DoctrineChoiceLoader when entities have a composite id
  • added two Messenger middleware: DoctrinePingConnectionMiddleware and DoctrineCloseConnectionMiddleware

Bridge/Monolog

  • added ConsoleCommandProcessor: monolog processor that adds command name and arguments
  • added RouteProcessor: monolog processor that adds route name, controller::action and route params

Bridge/PhpUnit

  • added ClassExistsMock
  • bumped PHP version from 5.3.3 to 5.5.9
  • split simple-phpunit bin into php file with code and a shell script

Bridge/Twig

  • added the form_parent() function that allows to reliably retrieve the parent form in Twig templates
  • added the workflow_transition_blockers() function
  • deprecated the $requestStack and $requestContext arguments of the HttpFoundationExtension, pass a Symfony\Component\HttpFoundation\UrlHelper instance as the only argument instead

Bundle/FrameworkBundle

  • Deprecated the framework.templating option, configure the Twig bundle instead.
  • Added WebTestAssertionsTrait (included by default in WebTestCase)
  • Renamed Client to KernelBrowser
  • Not passing the project directory to the constructor of the AssetsInstallCommand is deprecated. This argument will be mandatory in 5.0.
  • Deprecated the "Psr\SimpleCache\CacheInterface" / "cache.app.simple" service, use "Symfony\Contracts\Cache\CacheInterface" / "cache.app" instead
  • Added the ability to specify a custom serializer option for each transport underframework.messenger.transports.
  • Added the RegisterLocaleAwareServicesPass and configured the LocaleAwareListener
  • [BC Break] When using Messenger, the default transport changed from using Symfony's serializer service to use PhpSerializer, which uses PHP's native serialize() and unserialize() functions. To use the original serialization method, set the framework.messenger.default_serializer config option to messenger.transport.symfony_serializer. Or set the serializer option under one specific transport.
  • [BC Break] The framework.messenger.serializer config key changed to framework.messenger.default_serializer, which holds the string service id and framework.messenger.symfony_serializer, which configures the options if you're using Symfony's serializer.
  • [BC Break] Removed the framework.messenger.routing.send_and_handle configuration. Instead of setting it to true, configure a SyncTransport and route messages to it.
  • Added information about deprecated aliases in debug:autowiring
  • Added php ini session options sid_length and sid_bits_per_character to the session section of the configuration
  • Added support for Translator paths, Twig paths in translation commands.
  • Added support for PHP files with translations in translation commands.
  • Added support for boolean container parameters within routes.
  • Added the messenger:setup-transports command to setup messenger transports
  • Added a InMemoryTransport to Messenger. Use it with a DSN starting with in-memory://.
  • Added framework.property_access.throw_exception_on_invalid_property_path config option.
  • Added cache:pool:list command to list all available cache pools.

Bundle/SecurityBundle

  • Added new encoder types: auto (recommended), native and sodium
  • The normalization of the cookie names configured in the logout.delete_cookies option is deprecated and will be disabled in Symfony 5.0. This affects to cookies with dashes in their names. For example, starting from Symfony 5.0, the my-cookie name will delete my-cookie (with a dash) instead of my_cookie (with an underscore).
  • Deprecated configuring encoders using argon2i as algorithm, use auto instead

Bundle/WebProfilerBundle

  • Replaced the canvas performance graph renderer with an SVG renderer

Component/BrowserKit

  • Added PHPUnit constraints: BrowserCookieValueSame and BrowserHasCookie
  • Added HttpBrowser, an implementation of a browser with the HttpClient component
  • Renamed Client to AbstractBrowser
  • Marked Response final.
  • Deprecated Response::buildHeader()
  • Deprecated Response::getStatus(), use Response::getStatusCode() instead

Component/Cache

  • removed psr/simple-cache dependency, run composer require psr/simple-cache if you need it
  • deprecated all PSR-16 adapters, use Psr16Cache or Symfony\Contracts\Cache\CacheInterface implementations instead
  • deprecated SimpleCacheAdapter, use Psr16Adapter instead

Component/Config

  • deprecated using environment variables with cannotBeEmpty() if the value is validated with validate()
  • made Resource\* classes final and not implement Serializable anymore
  • deprecated the root() method in TreeBuilder, pass the root node information to the constructor instead

Component/Console

  • added support for hyperlinks
  • added ProgressBar::iterate() method that simplify updating the progress bar when iterating
  • added Question::setAutocompleterCallback() to provide a callback function that dynamically generates suggestions as the user types

Component/Debug

  • made the ErrorHandler and ExceptionHandler classes final
  • added Exception\FlattenException::getAsString and Exception\FlattenException::getTraceAsString to increase compatibility to php exception objects

Component/DependencyInjection

  • added %env(trim:...)% processor to trim a string value
  • added %env(default:param_name:...)% processor to fallback to a parameter or to null when using %env(default::...)%
  • added %env(url:...)% processor to convert an URL or DNS into an array of components
  • added %env(query_string:...)% processor to convert a query string into an array of key values
  • added support for deprecating aliases
  • made ContainerParametersResource final and not implement Serializable anymore
  • added ReverseContainer: a container that turns services back to their ids
  • added ability to define an index for a tagged collection
  • added ability to define an index for services in an injected service locator argument
  • made ServiceLocator implement ServiceProviderInterface
  • deprecated support for non-string default env() parameters
  • added %env(require:...)% processor to require() a PHP file and use the value returned from it

Component/DomCrawler

  • Added PHPUnit constraints: CrawlerSelectorAttributeValueSame, CrawlerSelectorExists, CrawlerSelectorTextContains and CrawlerSelectorTextSame
  • Added return of element name (_name) in extract() method.
  • Added ability to return a default value in text() and html() instead of throwing an exception when node is empty.
  • When available, the html5-php library is used to parse HTML added to a Crawler for better support of HTML5 tags.

Component/Dotenv

  • deprecated use of putenv() by default. This feature will be opted-in with a constructor argument to Dotenv

Component/EventDispatcher

  • The signature of the EventDispatcherInterface::dispatch() method should be updated to dispatch($event, string $eventName = null), not doing so is deprecated
  • deprecated the Event class, use Symfony\Contracts\EventDispatcher\Event instead

Component/Filesystem

  • support for passing arrays to Filesystem::dumpFile() is deprecated and will be removed in 5.0
  • support for passing arrays to Filesystem::appendToFile() is deprecated and will be removed in 5.0

Component/Finder

  • added Finder::ignoreVCSIgnored() to ignore files based on rules listed in .gitignore

Component/Form

  • added a symbol option to the PercentType that allows to disable or customize the output of the percent character

  • Using the format option of DateType and DateTimeType when the html5 option is enabled is deprecated.

  • Using names for buttons that do not start with a letter, a digit, or an underscore is deprecated and will lead to an exception in 5.0.

  • Using names for buttons that do not contain only letters, digits, underscores, hyphens, and colons is deprecated and will lead to an exception in 5.0.

  • added html5 option to NumberType that allows to render type="number" input fields

  • deprecated using the date_format, date_widget, and time_widget options of the DateTimeType when the widget option is set to single_text

  • added block_prefix option to BaseType.

  • added help_html option to display the help text as HTML.

  • FormError doesn't implement Serializable anymore

  • FormDataCollector has been marked as final

  • added label_translation_parameters, attr_translation_parameters, help_translation_parameters options to FormType to pass translation parameters to form labels, attributes (placeholder and title) and help text respectively. The passed parameters will replace placeholders in translation messages.

    class OrderType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('comment', TextType::class, [
                'label' => 'Comment to the order to %company%',
                'label_translation_parameters' => [
                    '%company%' => 'Acme',
                ],
                'help' => 'The address of the %company% is %address%',
                'help_translation_parameters' => [
                    '%company%' => 'Acme Ltd.',
                    '%address%' => '4 Form street, Symfonyville',
                ],
            ])
        }
    }
  • added the input_format option to DateType, DateTimeType, and TimeType to specify the input format when setting the input option to string

  • dispatch PreSubmitEvent on form.pre_submit

  • dispatch SubmitEvent on form.submit

  • dispatch PostSubmitEvent on form.post_submit

  • dispatch PreSetDataEvent on form.pre_set_data

  • dispatch PostSetDataEvent on form.post_set_data

  • added an input option to NumberType

  • removed default option grouping in TimezoneType, use group_by instead

Component/HttpClient

  • added the component

Component/HttpFoundation

  • added PHPUnit constraints: RequestAttributeValueSame, ResponseCookieValueSame, ResponseHasCookie, ResponseHasHeader, ResponseHeaderSame, ResponseIsRedirected, ResponseIsSuccessful, and ResponseStatusCodeSame
  • deprecated MimeTypeGuesserInterface and ExtensionGuesserInterface in favor of Symfony\Component\Mime\MimeTypesInterface.
  • deprecated MimeType and MimeTypeExtensionGuesser in favor of Symfony\Component\Mime\MimeTypes.
  • deprecated FileBinaryMimeTypeGuesser in favor of Symfony\Component\Mime\FileBinaryMimeTypeGuesser.
  • deprecated FileinfoMimeTypeGuesser in favor of Symfony\Component\Mime\FileinfoMimeTypeGuesser.
  • added UrlHelper that allows to get an absolute URL and a relative path for a given path

Component/HttpKernel

  • renamed Client to HttpKernelBrowser
  • KernelInterface doesn't extend Serializable anymore
  • deprecated the Kernel::serialize() and unserialize() methods
  • increased the priority of Symfony\Component\HttpKernel\EventListener\AddRequestFormatsListener
  • made Symfony\Component\HttpKernel\EventListener\LocaleListener set the default locale early
  • deprecated TranslatorListener in favor of LocaleAwareListener
  • added the registration of all LocaleAwareInterface implementations into the LocaleAwareListener
  • made FileLinkFormatter final and not implement Serializable anymore
  • the base DataCollector doesn't implement Serializable anymore, you should store all the serialized state in the data property instead
  • DumpDataCollector has been marked as final
  • added an event listener to prevent search engines from indexing applications in debug mode.
  • renamed FilterControllerArgumentsEvent to ControllerArgumentsEvent
  • renamed FilterControllerEvent to ControllerEvent
  • renamed FilterResponseEvent to ResponseEvent
  • renamed GetResponseEvent to RequestEvent
  • renamed GetResponseForControllerResultEvent to ViewEvent
  • renamed GetResponseForExceptionEvent to ExceptionEvent
  • renamed PostResponseEvent to TerminateEvent
  • added HttpClientKernel for handling requests with an HttpClientInterface instance
  • added trace_header and trace_level configuration options to HttpCache

Component/Intl

  • deprecated ResourceBundle namespace
  • added Currencies in favor of Intl::getCurrencyBundle()
  • added Languages and Scripts in favor of Intl::getLanguageBundle()
  • added Locales in favor of Intl::getLocaleBundle()
  • added Countries in favor of Intl::getRegionBundle()
  • added Timezones
  • made country codes ISO 3166 compliant
  • excluded script code Zzzz

Component/Ldap

  • added EntryManager::move, not implementing it is deprecated
  • Added pagination support to the ExtLdap adapter with the pageSize query option

Component/Mailer/Bridge/Amazon

  • added the bridge

Component/Mailer/Bridge/Google

  • added the bridge

Component/Mailer/Bridge/Mailchimp

  • added the bridge

Component/Mailer/Bridge/Mailgun

  • added the bridge

Component/Mailer/Bridge/Postmark

  • added the bridge

Component/Mailer/Bridge/Sendgrid

  • added the bridge

Component/Mailer

  • Added the component

Component/Messenger

  • Added NonSendableStampInterface that a stamp can implement if it should not be sent to a transport. Transport serializers must now check for these stamps and not encode them.
  • [BC BREAK] SendersLocatorInterface has an additional method: getSenderByAlias().
  • Removed argument ?bool &$handle = false from SendersLocatorInterface::getSenders
  • A new ListableReceiverInterface was added, which a receiver can implement (when applicable) to enable listing and fetching individual messages by id (used in the new "Failed Messages" commands).
  • Both SenderInterface::send() and ReceiverInterface::get() should now (when applicable) add a TransportMessageIdStamp.
  • Added WorkerStoppedEvent dispatched when a worker is stopped.
  • Added optional MessageCountAwareInterface that receivers can implement to give information about how many messages are waiting to be processed.
  • [BC BREAK] The Envelope::__construct() signature changed: you can no longer pass an unlimited number of stamps as the second, third, fourth, arguments etc: stamps are now an array passed to the second argument.
  • [BC BREAK] The MessageBusInterface::dispatch() signature changed: a second argument array $stamps = [] was added.
  • Added new messenger:stop-workers command that sends a signal to stop all messenger:consume workers.
  • [BC BREAK] The TransportFactoryInterface::createTransport() signature changed: a required 3rd SerializerInterface argument was added.
  • Added a new SyncTransport to explicitly handle messages synchronously.
  • Added AmqpStamp allowing to provide a routing key, flags and attributes on message publishing.
  • [BC BREAK] Removed publishing with a routing_key option from queue configuration, for AMQP. Use exchange default_publish_routing_key or AmqpStamp instead.
  • [BC BREAK] Changed the queue option in the AMQP transport DSN to be queues[name]. You can therefore name the queue but also configure binding_keys, flags and arguments.
  • [BC BREAK] The methods get, ack, nack and queue of the AMQP Connection have a new argument: the queue name.
  • Added optional parameter prefetch_count in connection configuration, to setup channel prefetch count.
  • New classes: RoutableMessageBus, AddBusNameStampMiddleware and BusNameStamp were added, which allow you to add a bus identifier to the Envelope then find the correct bus when receiving from the transport. See ConsumeMessagesCommand.
  • The optional $busNames constructor argument of the class ConsumeMessagesCommand was removed.
  • [BC BREAK] 3 new methods were added to ReceiverInterface: ack(), reject() and get(). The methods receive() and stop() were removed.
  • [BC BREAK] Error handling was moved from the receivers into Worker. Implementations of ReceiverInterface::handle() should now allow all exceptions to be thrown, except for transport exceptions. They should also not retry (e.g. if there's a queue, remove from the queue) if there is a problem decoding the message.
  • [BC BREAK] RejectMessageExceptionInterface was removed and replaced by Symfony\Component\Messenger\Exception\UnrecoverableMessageHandlingException, which has the same behavior: a message will not be retried
  • The default command name for ConsumeMessagesCommand was changed from messenger:consume-messages to messenger:consume
  • ConsumeMessagesCommand has two new optional constructor arguments
  • [BC BREAK] The first argument to Worker changed from a single ReceiverInterface to an array of ReceiverInterface.
  • Worker has 3 new optional constructor arguments.
  • The Worker class now handles calling pcntl_signal_dispatch() the receiver no longer needs to call this.
  • The AmqpSender will now retry messages using a dead-letter exchange and delayed queues, instead of retrying via nack()
  • Senders now receive the Envelope with the SentStamp on it. Previously, the Envelope was passed to the sender and then the SentStamp was added.
  • SerializerInterface implementations should now throw a Symfony\Component\Messenger\Exception\MessageDecodingFailedException if decode() fails for any reason.
  • [BC BREAK] The default Serializer will now throw a MessageDecodingFailedException if decode() fails, instead of the underlying exceptions from the Serializer component.
  • Added PhpSerializer which uses PHP's native serialize() and unserialize() to serialize messages to a transport
  • [BC BREAK] If no serializer were passed, the default serializer changed from Serializer to PhpSerializer inside AmqpReceiver, AmqpSender, AmqpTransport and AmqpTransportFactory.
  • Added TransportException to mark an exception transport-related
  • [BC BREAK] If listening to exceptions while using AmqpSender or AmqpReceiver, \AMQPException is no longer thrown in favor of TransportException.
  • Deprecated LoggingMiddleware, pass a logger to SendMessageMiddleware instead.
  • [BC BREAK] Connection::__construct() and Connection::fromDsn() both no longer have $isDebug arguments.
  • [BC BREAK] The Amqp Transport now automatically sets up the exchanges and queues by default. Previously, this was done when in "debug" mode only. Pass the auto_setup connection option to control this.
  • Added a SetupTransportsCommand command to setup the transports
  • Added a Doctrine transport. For example, use the doctrine://default DSN (this uses the default Doctrine entity manager)
  • [BC BREAK] The getConnectionConfiguration method on Amqp's Connection has been removed.
  • [BC BREAK] A HandlerFailedException exception will be thrown if one or more handler fails.
  • [BC BREAK] The HandlersLocationInterface::getHandlers method needs to return HandlerDescriptor instances instead of callables.
  • [BC BREAK] The HandledStamp stamp has changed: handlerAlias has been renamed to handlerName, getCallableName has been removed and its constructor only has 2 arguments now.
  • [BC BREAK] The ReceivedStamp needs to exposes the name of the transport from which the message has been received.

Component/Mime

  • Introduced the component as experimental

Component/OptionsResolver

  • added OptionsResolver::addNormalizer method

Component/PropertyAccess

  • added a $throwExceptionOnInvalidPropertyPath argument to the PropertyAccessor constructor.
  • added enableExceptionOnInvalidPropertyPath(), disableExceptionOnInvalidPropertyPath() and isExceptionOnInvalidPropertyPath() methods to PropertyAccessorBuilder

Component/PropertyInfo

  • Added the ability to extract private and protected properties and methods on ReflectionExtractor
  • Added the ability to extract property type based on its initial value

Component/Routing

  • added CompiledUrlMatcher and CompiledUrlMatcherDumper
  • added CompiledUrlGenerator and CompiledUrlGeneratorDumper
  • deprecated PhpGeneratorDumper and PhpMatcherDumper
  • deprecated generator_base_class, generator_cache_class, matcher_base_class and matcher_cache_class router options
  • Serializable implementing methods for Route and CompiledRoute are marked as @internal and @final. Instead of overwriting them, use __serialize and __unserialize as extension points which are forward compatible with the new serialization methods in PHP 7.4.
  • exposed utf8 Route option, defaults "locale" and "format" in configuration loaders and configurators
  • added support for invokable service route loaders

Component/Security

  • Added methods __serialize and __unserialize to the TokenInterface
  • Added SodiumPasswordEncoder and NativePasswordEncoder
  • The Role and SwitchUserRole classes are deprecated and will be removed in 5.0. Use strings for roles instead.
  • The getReachableRoles() method of the RoleHierarchyInterface is deprecated and will be removed in 5.0. Role hierarchies must implement the getReachableRoleNames() method instead and return roles as strings.
  • The getRoles() method of the TokenInterface is deprecated. Tokens must implement the getRoleNames() method instead and return roles as strings.
  • Made the serialize() and unserialize() methods of AbstractToken and AuthenticationException final, use __serialize()/__unserialize() instead
  • AuthenticationException doesn't implement Serializable anymore
  • Deprecated the ListenerInterface, turn your listeners into callables instead
  • Deprecated Firewall::handleRequest(), use Firewall::callListeners() instead
  • Dispatch AuthenticationSuccessEvent on security.authentication.success
  • Dispatch AuthenticationFailureEvent on security.authentication.failure
  • Dispatch InteractiveLoginEvent on security.interactive_login
  • Dispatch SwitchUserEvent on security.switch_user
  • Deprecated Argon2iPasswordEncoder, use SodiumPasswordEncoder instead
  • Deprecated BCryptPasswordEncoder, use NativePasswordEncoder instead
  • Added DeauthenticatedEvent dispatched in case the user has changed when trying to refresh the token

Component/Serializer

  • added the list of constraint violations' parameters in ConstraintViolationListNormalizer
  • added support for serializing DateTimeZone objects
  • added a deep_object_to_populate context option to recursive denormalize on object_to_populate object.

Component/Translation

  • Improved Xliff 1.2 loader to load the original file's metadata
  • Added TranslatorPathsPass

Component/Validator

  • added Timezone constraint
  • added NotCompromisedPassword constraint
  • added options iban and ibanPropertyPath to Bic constraint
  • added UATP cards support to CardSchemeValidator
  • added option allowNull to NotBlank constraint
  • added Json constraint
  • added Unique constraint
  • added a new normalizer option to the string constraints and to the NotBlank constraint
  • added Positive constraint
  • added PositiveOrZero constraint
  • added Negative constraint
  • added NegativeOrZero constraint

Component/VarDumper

  • added DsCaster to support dumping the contents of data structures from the Ds extension

Component/Workflow

  • Trigger entered event for subject entering in the Workflow for the first time.
  • Added a context to Workflow::apply(). The MethodMarkingStore could be used to leverage this feature.
  • The TransitionEvent is able to modify the context.
  • Add style to transitions by declaring metadata:

Component/Yaml

  • Using a mapping inside a multi-line string is deprecated and will throw a ParseException in 5.0.

Bridge/Doctrine

  • [BC BREAK] using null as $classValidatorRegexp value in DoctrineLoader::__construct will not enable auto-mapping for all classes anymore, use '{.*}' instead.
  • added DoctrineClearEntityManagerWorkerSubscriber
  • deprecated RegistryInterface, use Doctrine\Persistence\ManagerRegistry
  • added support for invokable event listeners
  • added getMetadataDriverClass method to deprecate class parameters in service configuration files

Bridge/Monolog

  • The RouteProcessor class has been made final
  • Added ElasticsearchLogstashHandler
  • Added the ServerLogCommand. Backport from the deprecated WebServerBundle

Bridge/PhpUnit

  • made the bridge act as a polyfill for newest PHPUnit features
  • added SetUpTearDownTrait to allow working around the void return-type added by PHPUnit 8
  • added namespace aliases for PHPUnit < 6

Bridge/Twig

  • added a new TwigErrorRenderer for html format, integrated with the ErrorHandler component
  • marked all classes extending twig as @final
  • deprecated to pass $rootDir and $fileLinkFormatter as 5th and 6th argument respectively to the DebugCommand::__construct() method, swap the variables position.
  • the LintCommand lints all the templates stored in all configured Twig paths if none argument is provided
  • deprecated accepting STDIN implicitly when using the lint:twig command, use lint:twig - (append a dash) instead to make it explicit.
  • added --show-deprecations option to the lint:twig command
  • added support for Bootstrap4 switches: add the switch-custom class to the label attributes of a CheckboxType
  • Marked the TwigDataCollector class as @final.

Bundle/FrameworkBundle

  • Added lint:container command to check that services wiring matches type declarations
  • Added MailerAssertionsTrait
  • Deprecated support for templating engine in TemplateController, use Twig instead
  • Deprecated the $parser argument of ControllerResolver::__construct() and DelegatingLoader::__construct()
  • Deprecated the controller_name_converter and resolve_controller_name_subscriber services
  • The ControllerResolver and DelegatingLoader classes have been marked as final
  • Added support for configuring chained cache pools
  • Deprecated calling WebTestCase::createClient() while a kernel has been booted, ensure the kernel is shut down before calling the method
  • Deprecated routing.loader.service, use routing.loader.container instead.
  • Not tagging service route loaders with routing.route_loader has been deprecated.
  • Overriding the methods KernelTestCase::tearDown() and WebTestCase::tearDown() without the void return-type is deprecated.
  • Added new error_controller configuration to handle system exceptions
  • Added sort option for translation:update command.
  • [BC Break] The framework.messenger.routing.senders config key is not deeply merged anymore.
  • Added secrets:* commands to deal with secrets seamlessly.
  • Made framework.session.handler_id accept a DSN
  • Marked the RouterDataCollector class as @final.
  • [BC Break] The framework.messenger.buses.<name>.middleware config key is not deeply merged anymore.

Bundle/SecurityBundle

  • Added anonymous: lazy mode to firewalls to make them (not) start the session as late as possible
  • Added migrate_from option to encoders configuration.
  • Added new argon2id encoder, undeprecated the bcrypt and argon2i ones (using auto is still recommended by default.)
  • Deprecated the usage of "query_string" without a "search_dn" and a "search_password" config key in Ldap factories.
  • Marked the SecurityDataCollector class as @final.

Bundle/TwigBundle

  • marked the TemplateIterator as internal
  • added HTML comment to beginning and end of exception_full.html.twig
  • deprecated ExceptionController and PreviewErrorController controllers, use ErrorController from the HttpKernel component instead
  • deprecated all built-in error templates in favor of the new error renderer mechanism
  • deprecated twig.exception_controller configuration option, set it to "null" and use framework.error_controller configuration instead

Bundle/WebProfilerBundle

  • added support for the Mailer component
  • added support for the HttpClient component
  • added button to clear the ajax request tab
  • deprecated the ExceptionController::templateExists() method
  • deprecated the TemplateManager::templateExists() method
  • deprecated the ExceptionController in favor of ExceptionPanelController
  • marked all classes of the WebProfilerBundle as internal
  • added a section with the stamps of a message after it is dispatched in the Messenger panel

Bundle/WebServerBundle

  • The bundle is deprecated and will be removed in 5.0.

Component/Cache

  • added support for connecting to Redis Sentinel clusters
  • added argument $prefix to AdapterInterface::clear()
  • improved RedisTagAwareAdapter to support Redis server >= 2.8 and up to 4B items per tag
  • added TagAwareMarshaller for optimized data storage when using AbstractTagAwareAdapter
  • added DeflateMarshaller to compress serialized values
  • removed support for phpredis 4 compression
  • [BC BREAK] RedisTagAwareAdapter is not compatible with RedisCluster from Predis anymore, use phpredis instead
  • Marked the CacheDataCollector class as @final.

Component/Config

  • added a way to exclude patterns of resources from being imported by the import() method

Component/Console

  • deprecated finding hidden commands using an abbreviation, use the full name instead
  • added Question::setTrimmable default to true to allow the answer to be trimmed
  • added method minSecondsBetweenRedraws() and maxSecondsBetweenRedraws() on ProgressBar
  • Application implements ResetInterface
  • marked all dispatched event classes as @final
  • added support for displaying table horizontally
  • deprecated returning null from Command::execute(), return 0 instead
  • Deprecated the Application::renderException() and Application::doRenderException() methods, use renderThrowable() and doRenderThrowable() instead.
  • added support for the NO_COLOR env var (https://no-color.org/)

Component/CssSelector

  • Added support for *:only-of-type

Component/Debug

  • deprecated FlattenException, use the FlattenException of the ErrorHandler component
  • deprecated the whole component in favor of the ErrorHandler component

Component/DependencyInjection

  • added CheckTypeDeclarationsPass to check injected parameters type during compilation
  • added support for opcache.preload by generating a preloading script in the cache folder
  • added support for dumping the container in one file instead of many files
  • deprecated support for short factories and short configurators in Yaml
  • added tagged_iterator alias for tagged which might be deprecated in a future version
  • deprecated passing an instance of Symfony\Component\DependencyInjection\Parameter as class name to Symfony\Component\DependencyInjection\Definition
  • added support for binding iterable and tagged services
  • made singly-implemented interfaces detection be scoped by file
  • added ability to define a static priority method for tagged service
  • added support for improved syntax to define method calls in Yaml
  • made the %env(base64:...)% processor able to decode base64url
  • added ability to choose behavior of decorations on non existent decorated services

Component/DomCrawler

  • Added Form::getName() method.
  • Added Crawler::matches() method.
  • Added Crawler::closest() method.
  • Added Crawler::outerHtml() method.
  • Added an argument to the Crawler::text() method to opt-in normalizing whitespaces.

Component/ErrorHandler

  • added the component
  • added ErrorHandler::call() method utility to turn any PHP error into \ErrorException

Component/EventDispatcher

  • AddEventAliasesPass has been added, allowing applications and bundles to extend the event alias mapping used by RegisterListenersPass.
  • Made the event attribute of the kernel.event_listener tag optional for FQCN events.

Component/Filesystem

  • support for passing a null value to Filesystem::isAbsolutePath() is deprecated and will be removed in 5.0

Component/Form

  • add new WeekType
  • using different values for the "model_timezone" and "view_timezone" options of the TimeType without configuring a reference date is deprecated
  • preferred choices are repeated in the list of all choices
  • deprecated using int or float as data for the NumberType when the input option is set to string
  • The type guesser guesses the HTML accept attribute when a mime type is configured in the File or Image constraint.
  • Overriding the methods FormIntegrationTestCase::setUp(), TypeTestCase::setUp() and TypeTestCase::tearDown() without the void return-type is deprecated.
  • marked all dispatched event classes as @final
  • Added the validate option to SubmitType to toggle the browser built-in form validation.
  • Added the alpha3 option to LanguageType and CountryType to use alpha3 instead of alpha2 codes

Component/HttpClient

  • added canceled to ResponseInterface::getInfo()
  • added HttpClient::createForBaseUri()
  • added HttplugClient with support for sync and async requests
  • added max_duration option
  • added support for NTLM authentication
  • added StreamWrapper to cast any ResponseInterface instances to PHP streams.
  • added $response->toStream() to cast responses to regular PHP streams
  • made Psr18Client implement relevant PSR-17 factories and have streaming responses
  • added TraceableHttpClient, HttpClientDataCollector and HttpClientPass to integrate with the web profiler
  • allow enabling buffering conditionally with a Closure
  • allow option "buffer" to be a stream resource
  • allow arbitrary values for the "json" option

Component/HttpFoundation

  • passing arguments to Request::isMethodSafe() is deprecated.
  • ApacheRequest is deprecated, use the Request class instead.
  • passing a third argument to HeaderBag::get() is deprecated, use method all() instead
  • [BC BREAK] PdoSessionHandler with MySQL changed the type of the lifetime column, make sure to run ALTER TABLE sessions MODIFY sess_lifetime INTEGER UNSIGNED NOT NULL to update your database.
  • PdoSessionHandler now precalculates the expiry timestamp in the lifetime column, make sure to run CREATE INDEX EXPIRY ON sessions (sess_lifetime) to update your database to speed up garbage collection of expired sessions.
  • added SessionHandlerFactory to create session handlers with a DSN
  • added IpUtils::anonymize() to help with GDPR compliance.

Component/HttpKernel

  • The DebugHandlersListener class has been marked as final
  • Added new Bundle directory convention consistent with standard skeletons
  • Deprecated the second and third argument of KernelInterface::locateResource
  • Deprecated the second and third argument of FileLocator::__construct
  • Deprecated loading resources from %kernel.root_dir%/Resources and %kernel.root_dir% as fallback directories. Resources like service definitions are usually loaded relative to the current directory or with a glob pattern. The fallback directories have never been advocated so you likely do not use those in any app based on the SF Standard or Flex edition.
  • Marked all dispatched event classes as @final
  • Added ErrorController to enable the preview and error rendering mechanism
  • Getting the container from a non-booted kernel is deprecated.
  • Marked the AjaxDataCollector, ConfigDataCollector, EventDataCollector, ExceptionDataCollector, LoggerDataCollector, MemoryDataCollector, RequestDataCollector and TimeDataCollector classes as @final.
  • Marked the RouterDataCollector::collect() method as @final.
  • The DataCollectorInterface::collect() and Profiler::collect() methods third parameter signature will be \Throwable $exception = null instead of \Exception $exception = null in Symfony 5.0.
  • Deprecated methods ExceptionEvent::get/setException(), use get/setThrowable() instead
  • Deprecated class ExceptionListener, use ErrorListener instead

Component/Intl

  • excluded language code root
  • added to both Countries and Languages the methods getAlpha3Codes, getAlpha3Code, getAlpha2Code, alpha3CodeExists, getAlpha3Name and getAlpha3Names
  • excluded localized languages (e.g. en_US) from Languages in getLanguageCodes() and getNames()

Component/Ldap

  • Added the "extra_fields" option, an array of custom fields to pull from the LDAP server

Component/Lock

  • added InvalidTtlException
  • deprecated StoreInterface in favor of BlockingStoreInterface and PersistingStoreInterface
  • Factory is deprecated, use LockFactory instead
  • StoreFactory::createStore allows PDO and Zookeeper DSN.
  • deprecated services lock.store.flock, lock.store.semaphore, lock.store.memcached.abstract and lock.store.redis.abstract, use StoreFactory::createStore instead.

4.2.0

Component/Mailer/Bridge/Amazon

  • [BC BREAK] Renamed and moved Symfony\Component\Mailer\Bridge\Amazon\Http\Api\SesTransport to Symfony\Component\Mailer\Bridge\Amazon\Transpor\SesApiTransport, Symfony\Component\Mailer\Bridge\Amazon\Http\SesTransport to Symfony\Component\Mailer\Bridge\Amazon\Transport\SesHttpTransport, Symfony\Component\Mailer\Bridge\Amazon\Smtp\SesTransport to Symfony\Component\Mailer\Bridge\Amazon\Transport\SesSmtpTransport.

Component/Mailer/Bridge/Google

  • [BC BREAK] Renamed and moved Symfony\Component\Mailer\Bridge\Google\Smtp\GmailTransport to Symfony\Component\Mailer\Bridge\Google\Transport\GmailSmtpTransport.

Component/Mailer/Bridge/Mailchimp

  • [BC BREAK] Renamed and moved Symfony\Component\Mailer\Bridge\Mailchimp\Http\Api\MandrillTransport to Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillApiTransport, Symfony\Component\Mailer\Bridge\Mailchimp\Http\MandrillTransport to Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillHttpTransport, Symfony\Component\Mailer\Bridge\Mailchimp\Smtp\MandrillTransport to Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillSmtpTransport.

Component/Mailer/Bridge/Mailgun

  • [BC BREAK] Renamed and moved Symfony\Component\Mailer\Bridge\Mailgun\Http\Api\MailgunTransport to Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunApiTransport, Symfony\Component\Mailer\Bridge\Mailgun\Http\MailgunTransport to Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunHttpTransport, Symfony\Component\Mailer\Bridge\Mailgun\Smtp\MailgunTransport to Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunSmtpTransport.

Component/Mailer/Bridge/Postmark

  • added ReplyTo option
  • [BC BREAK] Renamed and moved Symfony\Component\Mailer\Bridge\Postmark\Http\Api\PostmarkTransport to Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkApiTransport, Symfony\Component\Mailer\Bridge\Postmark\Smtp\PostmarkTransport to Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkSmtpTransport.

Component/Mailer/Bridge/Sendgrid

  • [BC BREAK] Renamed and moved Symfony\Component\Mailer\Bridge\Sendgrid\Http\Api\SendgridTransport to Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridApiTransport, Symfony\Component\Mailer\Bridge\Sendgrid\Smtp\SendgridTransport to Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridSmtpTransport.

Component/Mailer

  • [BC BREAK] changed the NullTransport DSN from smtp://null to null://null
  • [BC BREAK] renamed SmtpEnvelope to Envelope, renamed DelayedSmtpEnvelope to DelayedEnvelope
  • [BC BREAK] changed the syntax for failover and roundrobin DSNs

Component/Messenger

  • Added support for auto trimming of Redis streams.
  • InMemoryTransport handle acknowledged and rejected messages.
  • Made all dispatched worker event classes final.
  • Added support for from_transport attribute on messenger.message_handler tag.
  • Added support for passing dbindex as a query parameter to the redis transport DSN.
  • Added WorkerStartedEvent and WorkerRunningEvent
  • [BC BREAK] Removed SendersLocatorInterface::getSenderByAlias added in 4.3.
  • [BC BREAK] Removed $retryStrategies argument from Worker::__construct.
  • [BC BREAK] Changed arguments of ConsumeMessagesCommand::__construct.
  • [BC BREAK] Removed $senderClassOrAlias argument from RedeliveryStamp::__construct.
  • [BC BREAK] Removed UnknownSenderException.
  • [BC BREAK] Removed WorkerInterface.
  • [BC BREAK] Removed $onHandledCallback of Worker::run(array $options = [], callable $onHandledCallback = null).
  • [BC BREAK] Removed StopWhenMemoryUsageIsExceededWorker in favor of StopWorkerOnMemoryLimitListener.
  • [BC BREAK] Removed StopWhenMessageCountIsExceededWorker in favor of StopWorkerOnMessageLimitListener.
  • [BC BREAK] Removed StopWhenTimeLimitIsReachedWorker in favor of StopWorkerOnTimeLimitListener.
  • [BC BREAK] Removed StopWhenRestartSignalIsReceived in favor of StopWorkerOnRestartSignalListener.
  • The component is not marked as @experimental anymore.
  • Marked the MessengerDataCollector class as @final.
  • Added support for DelayStamp to the redis transport.

Component/Mime

  • [BC BREAK] Removed NamedAddress (Address now supports a name)
  • Added PHPUnit constraints
  • Added AbstractPart::asDebugString()
  • Added Address::fromString()

Component/Process

  • deprecated Process::inheritEnvironmentVariables(): env variables are always inherited.
  • added Process::getLastOutputTime() method

Component/PropertyAccess

  • deprecated passing null as $defaultLifetime 2nd argument of PropertyAccessor::createCache() method, pass 0 instead

Component/Routing

  • Deprecated ServiceRouterLoader in favor of ContainerLoader.
  • Deprecated ObjectRouteLoader in favor of ObjectLoader.
  • Added a way to exclude patterns of resources from being imported by the import() method

Component/Security

  • Deprecated class LdapUserProvider, use Symfony\Component\Ldap\Security\LdapUserProvider instead
  • Added method needsRehash() to PasswordEncoderInterface and UserPasswordEncoderInterface
  • Added MigratingPasswordEncoder
  • Added and implemented PasswordUpgraderInterface, for opportunistic password migrations
  • Added Guard\PasswordAuthenticatedInterface, an optional interface for "guard" authenticators that deal with user passwords
  • Marked all dispatched event classes as @final
  • Deprecated returning a non-boolean value when implementing Guard\AuthenticatorInterface::checkCredentials().
  • Deprecated passing more than one attribute to AccessDecisionManager::decide() and AuthorizationChecker::isGranted()
  • Added new argon2id encoder, undeprecated the bcrypt and argon2i ones (using auto is still recommended by default.)
  • Added AbstractListener which replaces the deprecated ListenerInterface

Component/Serializer

  • deprecated the XmlEncoder::TYPE_CASE_ATTRIBUTES constant, use XmlEncoder::TYPE_CAST_ATTRIBUTES instead
  • added option to output a UTF-8 BOM in CSV encoder via CsvEncoder::OUTPUT_UTF8_BOM_KEY context option
  • added ProblemNormalizer to normalize errors according to the API Problem spec (RFC 7807)

Component/Stopwatch

  • Deprecated passing null as 1st ($id) argument of Section::get() method, pass a valid child section identifier instead.

Component/Translation

  • deprecated support for using null as the locale in Translator
  • deprecated accepting STDIN implicitly when using the lint:xliff command, use lint:xliff - (append a dash) instead to make it explicit.
  • Marked the TranslationDataCollector class as @final.

Component/Validator

  • [BC BREAK] using null as $classValidatorRegexp value in PropertyInfoLoader::__construct will not enable auto-mapping for all classes anymore, use '{.*}' instead.
  • added EnableAutoMapping and DisableAutoMapping constraints to enable or disable auto mapping for class or a property
  • using anything else than a string as the code of a ConstraintViolation is deprecated, a string type-hint will be added to the constructor of the ConstraintViolation class and to the ConstraintViolationBuilder::setCode() method in 5.0
  • deprecated passing an ExpressionLanguage instance as the second argument of ExpressionValidator::__construct(). Pass it as the first argument instead.
  • added the compared_value_path parameter in violations when using any comparison constraint with the propertyPath option.
  • added support for checking an array of types in TypeValidator
  • added a new allowEmptyString option to the Length constraint to allow rejecting empty strings when min is set, by setting it to false.
  • Added new minPropertyPath and maxPropertyPath options to Range constraint in order to get the value to compare from an array or object
  • added the min_limit_path and max_limit_path parameters in violations when using Range constraint with respectively the minPropertyPath and maxPropertyPath options
  • added a new notInRangeMessage option to the Range constraint that will be used in the violation builder when both min and max are not null
  • added ability to use stringable objects as violation messages
  • Overriding the methods ConstraintValidatorTestCase::setUp() and ConstraintValidatorTestCase::tearDown() without the void return-type is deprecated.
  • deprecated Symfony\Component\Validator\Mapping\Cache\CacheInterface in favor of PSR-6.
  • deprecated ValidatorBuilder::setMetadataCache, use ValidatorBuilder::setMappingCache instead.
  • Marked the ValidatorDataCollector class as @final.

Component/VarDumper

  • added VarDumperTestTrait::setUpVarDumper() and VarDumperTestTrait::tearDownVarDumper() to configure casters & flags to use in tests
  • added ImagineCaster and infrastructure to dump images
  • added the stamps of a message after it is dispatched in TraceableMessageBus and MessengerDataCollector collected data
  • added UuidCaster
  • made all casters final
  • added support for the NO_COLOR env var (https://no-color.org/)

Component/WebLink

  • implement PSR-13 directly

Component/Workflow

  • Marked all dispatched event classes as @final

Component/Yaml

  • Added support for parsing the inline notation spanning multiple lines.
  • Added support to dump null as ~ by using the Yaml::DUMP_NULL_AS_TILDE flag.
  • deprecated accepting STDIN implicitly when using the lint:yaml command, use lint:yaml - (append a dash) instead to make it explicit.

Bridge/Doctrine

  • the getMetadataDriverClass() method is abstract and must be implemented by class extending AbstractDoctrineExtension
  • passing an IdReader to the DoctrineChoiceLoader when the query cannot be optimized with single id field, throws an exception; pass null instead
  • not explicitly passing an instance of IdReader to DoctrineChoiceLoader when it can optimize single id field, will not apply any optimization
  • DoctrineExtractor now requires an EntityManagerInterface on instantiation

Bridge/Monolog

  • The methods DebugProcessor::getLogs(), DebugProcessor::countErrors(), Logger::getLogs() and Logger::countErrors() have a new $request argument.
  • Added support for Monolog 2.

Bridge/PhpUnit

  • removed weak_vendor mode, use max[self]=0 instead

Bridge/Twig

  • removed TwigEngine class, use \Twig\Environment instead.
  • removed transChoice filter and token
  • HttpFoundationExtension requires a UrlHelper on instantiation
  • removed support for implicit STDIN usage in the lint:twig command, use lint:twig - (append a dash) instead to make it explicit.
  • moved command twig:lint from TwigBundle

Bundle/FrameworkBundle

  • Removed support to load translation resources from the legacy directories src/Resources/translations/ and src/Resources/<BundleName>/translations/
  • Removed ControllerNameParser.
  • Removed ResolveControllerNameSubscriber
  • Removed support for bundle:controller:action to reference controllers. Use serviceOrFqcn::method instead
  • Removed support for PHP templating, use Twig instead
  • Removed Controller, use AbstractController instead
  • Removed Client, use KernelBrowser instead
  • Removed ContainerAwareCommand, use dependency injection instead
  • Removed the validation.strict_email option, use validation.email_validation_mode instead
  • Removed the cache.app.simple service and its corresponding PSR-16 autowiring alias
  • Removed cache-related compiler passes and RequestDataCollector
  • Removed the translator.selector and session.save_listener services
  • Removed SecurityUserValueResolver, use UserValueResolver instead
  • Removed routing.loader.service.
  • Service route loaders must be tagged with routing.route_loader.
  • Added slugger service and SluggerInterface alias
  • Removed the lock.store.flock, lock.store.semaphore, lock.store.memcached.abstract and lock.store.redis.abstract services.
  • Removed the router.cache_class_prefix parameter.
  • Added translation:debug command
  • Added --no-backup option to translation:update command
  • Added config:debug command
  • Added yaml:lint command
  • Deprecated the RouterApacheDumperCommand which will be removed in Symfony 3.0.

Bundle/SecurityBundle

  • The switch_user.stateless firewall option has been removed.
  • Removed the ability to configure encoders using argon2i or bcrypt as algorithm, use auto instead
  • The simple_form and simple_preauth authentication listeners have been removed, use Guard instead.
  • The SimpleFormFactory and SimplePreAuthenticationFactory classes have been removed, use Guard instead.
  • Removed LogoutUrlHelper and SecurityHelper templating helpers, use Twig instead
  • Removed the logout_on_user_change firewall option
  • Removed the threads encoder option
  • Removed the security.authentication.trust_resolver.anonymous_class parameter
  • Removed the security.authentication.trust_resolver.rememberme_class parameter
  • Removed the security.user.provider.in_memory.user service.

Bundle/TwigBundle

  • updated default value for the strict_variables option to %kernel.debug% parameter
  • removed support to load templates from the legacy directories src/Resources/views/ and src/Resources/<BundleName>/views/
  • removed TwigEngine class, use Twig\Environment instead
  • removed FilesystemLoader and NativeFilesystemLoader, use Twig notation for templates instead
  • removed twig.exception_controller configuration option, use framework.error_controller option instead
  • removed ExceptionController, PreviewErrorController and all built-in error templates in favor of the new error renderer mechanism

Bundle/WebProfilerBundle

  • removed the ExceptionController, use ExceptionPanelController instead
  • removed the TemplateManager::templateExists() method

Component/Cache

  • removed all PSR-16 implementations in the Simple namespace
  • removed SimpleCacheAdapter
  • removed AbstractAdapter::unserialize()
  • removed CacheItem::getPreviousTags()

Component/Config

  • Dropped support for constructing a TreeBuilder without passing root node information.
  • Removed the root() method in TreeBuilder, pass the root node information to the constructor instead
  • Added method getChildNodeDefinitions() to ParentNodeDefinitionInterface
  • Removed FileLoaderLoadException, use LoaderLoadException instead

Component/Console

  • removed support for finding hidden commands using an abbreviation, use the full name instead
  • removed TableStyle::setCrossingChar() method in favor of TableStyle::setDefaultCrossingChar()
  • removed TableStyle::setHorizontalBorderChar() method in favor of TableStyle::setDefaultCrossingChars()
  • removed TableStyle::getHorizontalBorderChar() method in favor of TableStyle::getBorderChars()
  • removed TableStyle::setVerticalBorderChar() method in favor of TableStyle::setVerticalBorderChars()
  • removed TableStyle::getVerticalBorderChar() method in favor of TableStyle::getBorderChars()
  • removed support for returning null from Command::execute(), return 0 instead
  • ProcessHelper::run() accepts only array|Symfony\Component\Process\Process for its command argument
  • Application::setDispatcher accepts only Symfony\Contracts\EventDispatcher\EventDispatcherInterface for its dispatcher argument
  • renamed Application::renderException() and Application::doRenderException() to renderThrowable() and doRenderThrowable() respectively.
  • deprecated the dialog helper (use the question helper instead)
  • deprecated TableHelper in favor of Table
  • deprecated ProgressHelper in favor of ProgressBar
  • added ConsoleLogger
  • added a question helper
  • added a way to set the process name of a command
  • added a way to set a default command instead of ListCommand

Component/DependencyInjection

  • removed support for auto-discovered extension configuration class which does not implement ConfigurationInterface
  • removed support for non-string default env() parameters
  • moved ServiceSubscriberInterface to the Symfony\Contracts\Service namespace
  • removed RepeatedPass and RepeatablePassInterface
  • removed support for short factory/configurator syntax from YamlFileLoader
  • removed ResettableContainerInterface, use ResetInterface instead
  • added argument $returnsClone to Definition::addMethodCall()
  • removed tagged, use tagged_iterator instead
  • added DecoratorServicePass and a way to override a service definition (Definition::setDecoratedService())
  • deprecated SimpleXMLElement class.

Component/DomCrawler

  • Added argument $selector to ``Crawler::children()`
  • Added argument $default to ``Crawler::text()andhtml()`
  • [BC BREAK] The default value for checkbox and radio inputs without a value attribute have changed from '1' to 'on' to match the HTML specification.
  • [BC BREAK] The typehints on the Link, Form and FormField classes have been changed from \DOMNode to DOMElement. Using any other type of DOMNode was triggering fatal errors in previous versions. Code extending these classes will need to update the typehints when overwriting these methods.

Component/Dotenv

  • using putenv() is disabled by default

Component/EventDispatcher

  • The signature of the EventDispatcherInterface::dispatch() method has been changed to dispatch($event, string $eventName = null): object.
  • The Event class has been removed in favor of Symfony\Contracts\EventDispatcher\Event.
  • The TraceableEventDispatcherInterface has been removed.
  • The WrappedListener class is now final.
  • added Debug\TraceableEventDispatcher (originally in HttpKernel)
  • changed Debug\TraceableEventDispatcherInterface to extend EventDispatcherInterface
  • added RegisterListenersPass (originally in HttpKernel)

Component/Filesystem

  • Filesystem::dumpFile() and appendToFile() don't accept arrays anymore

Component/Finder

  • added $useNaturalSort argument to Finder::sortByName()

Component/Form

  • Removed support for using different values for the "model_timezone" and "view_timezone" options of the TimeType without configuring a reference date.
  • Removed the scale option of the IntegerType.
  • Using the date_format, date_widget, and time_widget options of the DateTimeType when the widget option is set to single_text is not supported anymore.
  • The format option of DateType and DateTimeType cannot be used when the html5 option is enabled.
  • Using names for buttons that do not start with a letter, a digit, or an underscore throw an exception
  • Using names for buttons that do not contain only letters, digits, underscores, hyphens, and colons throw an exception.
  • removed the ChoiceLoaderInterface implementation in CountryType, LanguageType, LocaleType and CurrencyType
  • removed getExtendedType() method of the FormTypeExtensionInterface
  • added static getExtendedTypes() method to the FormTypeExtensionInterface
  • calling to FormRenderer::searchAndRenderBlock() method for fields which were already rendered throw a BadMethodCallException
  • removed the regions option of the TimezoneType
  • removed the $scale argument of the IntegerToLocalizedStringTransformer
  • removed TemplatingExtension and TemplatingRendererEngine classes, use Twig instead
  • passing a null message when instantiating a Symfony\Component\Form\FormError is not allowed
  • removed support for using int or float as data for the NumberType when the input option is set to string
  • deprecated options "max_length" and "pattern" in favor of putting these values in "attr" option
  • added an option for multiple files upload
  • form errors now reference their cause (constraint violation, exception, ...)
  • form errors now remember which form they were originally added to
  • [BC BREAK] added two optional parameters to FormInterface::getErrors() and changed the method to return a Symfony\Component\Form\FormErrorIterator instance instead of an array
  • errors mapped to unsubmitted forms are discarded now
  • ObjectChoiceList now compares choices by their value, if a value path is given
  • you can now pass interface names in the "data_class" option
  • [BC BREAK] added FormInterface::getTransformationFailure()

Component/HttpFoundation

  • made Cookie auto-secure and lax by default
  • removed classes in the MimeType namespace, use the Symfony Mime component instead
  • removed method UploadedFile::getClientSize() and the related constructor argument
  • made Request::getSession() throw if the session has not been set before
  • removed Response::HTTP_RESERVED_FOR_WEBDAV_ADVANCED_COLLECTIONS_EXPIRED_PROPOSAL
  • passing a null url when instantiating a RedirectResponse is not allowed
  • added JsonResponse::setEncodingOptions() & JsonResponse::getEncodingOptions() for easier manipulation of the options used while encoding data to JSON format.

Component/HttpKernel

  • removed support for getting the container from a non-booted kernel
  • removed the first and second constructor argument of ConfigDataCollector
  • removed ConfigDataCollector::getApplicationName()
  • removed ConfigDataCollector::getApplicationVersion()
  • removed support for Symfony\Component\Templating\EngineInterface in HIncludeFragmentRenderer, use a Twig\Environment only
  • removed TranslatorListener in favor of LocaleAwareListener
  • removed getRootDir() and getName() from Kernel and KernelInterface
  • removed FilterControllerArgumentsEvent, use ControllerArgumentsEvent instead
  • removed FilterControllerEvent, use ControllerEvent instead
  • removed FilterResponseEvent, use ResponseEvent instead
  • removed GetResponseEvent, use RequestEvent instead
  • removed GetResponseForControllerResultEvent, use ViewEvent instead
  • removed GetResponseForExceptionEvent, use ExceptionEvent instead
  • removed PostResponseEvent, use TerminateEvent instead
  • removed SaveSessionListener in favor of AbstractSessionListener
  • removed Client, use HttpKernelBrowser instead
  • added method getProjectDir() to KernelInterface
  • removed methods serialize and unserialize from DataCollector, store the serialized state in the data property instead
  • made ProfilerStorageInterface internal
  • removed the second and third argument of KernelInterface::locateResource
  • removed the second and third argument of FileLocator::__construct
  • removed loading resources from %kernel.root_dir%/Resources and %kernel.root_dir% as fallback directories.
  • removed class ExceptionListener, use ErrorListener instead
  • deprecated Symfony\Component\HttpKernel\DependencyInjection\RegisterListenersPass, use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass instead

Component/Intl

  • removed ResourceBundle namespace

Component/Ldap

  • Added method move() to EntryManagerInterface`
  • Added pagination support to the ExtLdap adapter with the pageSize query option

Component/Lock

  • Factory has been removed, use LockFactory instead.
  • StoreInterface has been removed, use BlockingStoreInterface and PersistingStoreInterface instead.
  • removed the waitAndSave() method from CombinedStore, MemcachedStore, RedisStore, and ZookeeperStore

Component/Messenger

  • The LoggingMiddleware class has been removed, pass a logger to SendMessageMiddleware instead.
  • made SendersLocator require a ContainerInterface as 2nd argument

Component/Notifier/Bridge/Nexmo

  • Added the bridge

Component/Notifier/Bridge/Slack

  • Added the bridge

Component/Notifier/Bridge/Telegram

  • Added the bridge

Component/Notifier/Bridge/Twilio

  • Added the bridge

Component/Notifier

  • Introduced the component as experimental

Component/OptionsResolver

  • added argument $triggerDeprecation to OptionsResolver::offsetGet()

Component/Process

  • removed Process::inheritEnvironmentVariables()
  • removed PhpProcess::setPhpBinary()
  • Process must be instantiated with a command array, use Process::fromShellCommandline() when the command should be parsed by the shell
  • removed Process::setCommandLine()
  • added support for PTY mode
  • added the convenience method "mustRun"
  • deprecation: Process::setStdin() is deprecated in favor of Process::setInput()
  • deprecation: Process::getStdin() is deprecated in favor of Process::getInput()
  • deprecation: Process::setInput() and ProcessBuilder::setInput() do not accept non-scalar types

Component/PropertyAccess

  • allowed non alpha numeric characters in second level and deeper object properties names
  • [BC BREAK] when accessing an index on an object that does not implement ArrayAccess, a NoSuchIndexException is now thrown instead of the semantically wrong NoSuchPropertyException
  • [BC BREAK] added isReadable() and isWritable() to PropertyAccessorInterface

Component/Routing

  • removed PhpGeneratorDumper and PhpMatcherDumper
  • removed generator_base_class, generator_cache_class, matcher_base_class and matcher_cache_class router options
  • Serializable implementing methods for Route and CompiledRoute are final
  • removed referencing service route loaders with a single colon
  • Removed ServiceRouterLoader and ObjectRouteLoader.
  • [DEPRECATION] The ApacheMatcherDumper and ApacheUrlMatcher were deprecated and will be removed in Symfony 3.0, since the performance gains were minimal and it's hard to replicate the behavior of PHP implementation.

Component/Security

  • Dropped support for passing more than one attribute to AccessDecisionManager::decide() and AuthorizationChecker::isGranted() (and indirectly the is_granted() Twig and ExpressionLanguage function):

Component/Serializer

  • throw an exception when creating a Serializer with normalizers which neither implement NormalizerInterface nor DenormalizerInterface
  • throw an exception when creating a Serializer with encoders which neither implement EncoderInterface nor DecoderInterface
  • changed the default value of the CsvEncoder "as_collection" option to true
  • removed AbstractNormalizer::$circularReferenceLimit, AbstractNormalizer::$circularReferenceHandler, AbstractNormalizer::$callbacks, AbstractNormalizer::$ignoredAttributes, AbstractNormalizer::$camelizedAttributes, AbstractNormalizer::setCircularReferenceLimit(), AbstractNormalizer::setCircularReferenceHandler(), AbstractNormalizer::setCallbacks() and AbstractNormalizer::setIgnoredAttributes(), use the default context instead.
  • removed AbstractObjectNormalizer::$maxDepthHandler and AbstractObjectNormalizer::setMaxDepthHandler(), use the default context instead.
  • removed XmlEncoder::setRootNodeName() & XmlEncoder::getRootNodeName(), use the default context instead.
  • removed individual encoders/normalizers options as constructor arguments.
  • removed support for instantiating a DataUriNormalizer with a default MIME type guesser when the symfony/mime component isn't installed.
  • removed the XmlEncoder::TYPE_CASE_ATTRIBUTES constant. Use XmlEncoder::TYPE_CAST_ATTRIBUTES instead.
  • added support for is.* getters in GetSetMethodNormalizer

Component/Stopwatch

  • Removed support for passing null as 1st ($id) argument of Section::get() method, pass a valid child section identifier instead.

Component/String

  • added the component as experimental

Component/Templating

  • added ability to generate versioned URLs
  • added ability to generate absolute URLs

Component/Translation

  • removed support for using null as the locale in Translator
  • removed TranslatorInterface
  • removed MessageSelector
  • removed ChoiceMessageFormatterInterface
  • removed PluralizationRule
  • removed Interval
  • removed transChoice() methods, use the trans() method instead with a %count% parameter
  • removed FileDumper::setBackup() and TranslationWriter::disableBackup()
  • removed MessageFormatter::choiceFormat()
  • added argument $filename to PhpExtractor::parseTokens()
  • removed support for implicit STDIN usage in the lint:xliff command, use lint:xliff - (append a dash) instead to make it explicit.
  • added relative file path template to the file dumpers
  • added optional backup to the file dumpers
  • changed IcuResFileDumper to extend FileDumper

Component/Validator

  • an ExpressionLanguage instance or null must be passed as the first argument of ExpressionValidator::__construct()
  • removed the checkDNS and dnsMessage options of the Url constraint
  • removed the checkMX, checkHost and strict options of the Email constraint
  • removed support for validating instances of \DateTimeInterface in DateTimeValidator, DateValidator and TimeValidator
  • removed support for using the Bic, Country, Currency, Language and Locale constraints without symfony/intl
  • removed support for using the Email constraint without egulias/email-validator
  • removed support for using the Expression constraint without symfony/expression-language
  • changed default value of canonicalize option of Locale constraint to true
  • removed ValidatorBuilderInterface
  • passing a null message when instantiating a ConstraintViolation is not allowed
  • changed the default value of Length::$allowEmptyString to false and made it optional
  • removed Symfony\Component\Validator\Mapping\Cache\CacheInterface in favor of PSR-6.
  • removed ValidatorBuilder::setMetadataCache, use ValidatorBuilder::setMappingCache instead.
  • deprecated ApcCache in favor of DoctrineCache
  • added DoctrineCache to adapt any Doctrine cache
  • GroupSequence now implements ArrayAccess, Countable and Traversable
  • [BC BREAK] changed ClassMetadata::getGroupSequence() to return a GroupSequence instance instead of an array
  • Callback can now be put onto properties (useful when you pass a closure to the constraint)
  • deprecated ClassBasedInterface
  • deprecated MetadataInterface
  • deprecated PropertyMetadataInterface
  • deprecated PropertyMetadataContainerInterface
  • deprecated Mapping\ElementMetadata
  • added Mapping\MetadataInterface
  • added Mapping\ClassMetadataInterface
  • added Mapping\PropertyMetadataInterface
  • added Mapping\GenericMetadata
  • added Mapping\CascadingStrategy
  • added Mapping\TraversalStrategy
  • deprecated Mapping\ClassMetadata::accept()
  • deprecated Mapping\MemberMetadata::accept()
  • removed array type hint of Mapping\ClassMetadata::setGroupSequence()
  • deprecated MetadataFactoryInterface
  • deprecated Mapping\BlackholeMetadataFactory
  • deprecated Mapping\ClassMetadataFactory
  • added Mapping\Factory\MetadataFactoryInterface
  • added Mapping\Factory\BlackHoleMetadataFactory
  • added Mapping\Factory\LazyLoadingMetadataFactory
  • deprecated ExecutionContextInterface
  • deprecated ExecutionContext
  • deprecated GlobalExecutionContextInterface
  • added Context\ExecutionContextInterface
  • added Context\ExecutionContext
  • added Context\ExecutionContextFactoryInterface
  • added Context\ExecutionContextFactory
  • deprecated ValidatorInterface
  • deprecated Validator
  • deprecated ValidationVisitorInterface
  • deprecated ValidationVisitor
  • added Validator\ValidatorInterface
  • added Validator\RecursiveValidator
  • added Validator\ContextualValidatorInterface
  • added Validator\RecursiveContextualValidator
  • added Violation\ConstraintViolationBuilderInterface
  • added Violation\ConstraintViolationBuilder
  • added ConstraintViolation::getParameters()
  • added ConstraintViolation::getPlural()
  • added Constraints\Traverse
  • deprecated $deep property in Constraints\Valid
  • added ValidatorBuilderInterface::setApiVersion()
  • added Validation::API_VERSION_2_4
  • added Validation::API_VERSION_2_5
  • added Exception\OutOfBoundsException
  • added Exception\UnsupportedMetadataException
  • made Exception\ValidatorException extend Exception\RuntimeException
  • added Util\PropertyPath
  • made the PropertyAccess component an optional dependency
  • deprecated ValidatorBuilder::setPropertyAccessor()
  • deprecated validate and validateValue on Validator\Context\ExecutionContext use getValidator() together with inContext() instead

Component/Workflow

  • Added argument $context to MarkingStoreInterface::setMarking()

Component/Yaml

  • Removed support for mappings inside multi-line strings.
  • removed support for implicit STDIN usage in the lint:yaml command, use lint:yaml - (append a dash) instead to make it explicit.

Bridge/PhpUnit

  • ignore verbosity settings when the build fails because of deprecations
  • added per-group verbosity
  • added ExpectDeprecationTrait to be able to define an expected deprecation from inside a test
  • deprecated the @expectedDeprecation annotation, use the ExpectDeprecationTrait::expectDeprecation() method instead

Bundle/SecurityBundle

  • Added XSD for configuration
  • Added security configuration for priority-based access decision strategy
  • Marked the AnonymousFactory, FormLoginFactory, FormLoginLdapFactory, GuardAuthenticationFactory, HttpBasicFactory, HttpBasicLdapFactory, JsonLoginFactory, JsonLoginLdapFactory, RememberMeFactory, RemoteUserFactory and X509Factory as @internal
  • Renamed method AbstractFactory#createEntryPoint() to AbstractFactory#createDefaultEntryPoint()

Component/Asset

  • added RemoteJsonManifestVersionStrategy to download manifest over HTTP.

Component/Cache

  • added max-items + LRU + max-lifetime capabilities to ArrayCache
  • added CouchbaseBucketAdapter
  • added context cache-adapter to log messages

Component/Config

  • updated the signature of method NodeDefinition::setDeprecated() to NodeDefinition::setDeprecation(string $package, string $version, string $message)
  • updated the signature of method BaseNode::setDeprecated() to BaseNode::setDeprecation(string $package, string $version, string $message)
  • deprecated passing a null message to BaseNode::setDeprecated() to un-deprecate a node
  • deprecated BaseNode::getDeprecationMessage(), use BaseNode::getDeprecation() instead

Component/Console

  • Command::setHidden() is final since Symfony 5.1
  • Add SingleCommandApplication
  • Add Cursor class

Component/DependencyInjection

  • deprecated inline() in favor of inline_service() and ref() in favor of service() when using the PHP-DSL
  • allow decorators to reference their decorated service using the special .inner id
  • added support to autowire public typed properties in php 7.4
  • added support for defining method calls, a configurator, and property setters in InlineServiceConfigurator
  • added possibility to define abstract service arguments
  • allowed mixing "parent" and instanceof-conditionals/defaults/bindings
  • updated the signature of method Definition::setDeprecated() to Definition::setDeprecation(string $package, string $version, string $message)
  • updated the signature of method Alias::setDeprecated() to Alias::setDeprecation(string $package, string $version, string $message)
  • updated the signature of method DeprecateTrait::deprecate() to DeprecateTrait::deprecation(string $package, string $version, string $message)
  • deprecated the Psr\Container\ContainerInterface and Symfony\Component\DependencyInjection\ContainerInterface aliases of the service_container service, configure them explicitly instead
  • added class Symfony\Component\DependencyInjection\Dumper\Preloader to help with preloading on PHP 7.4+
  • added tags container.preload/.no_preload to declare extra classes to preload/services to not preload
  • allowed loading and dumping tags with an attribute named "name"
  • deprecated Definition::getDeprecationMessage(), use Definition::getDeprecation() instead
  • deprecated Alias::getDeprecationMessage(), use Alias::getDeprecation() instead
  • added support of PHP8 static return type for withers
  • added AliasDeprecatedPublicServicesPass to deprecate public services to private

Component/DomCrawler

  • Added an internal cache layer on top of the CssSelectorConverter
  • Added UriResolver to resolve an URI according to a base URI

Component/Dotenv

  • added Dotenv::bootEnv() to check for .env.local.php before calling Dotenv::loadEnv()
  • added Dotenv::setProdEnvs() and Dotenv::usePutenv()
  • made Dotenv's constructor accept $envKey and $debugKey arguments, to define the name of the env vars that configure the env name and debug settings
  • deprecated passing $usePutenv argument to Dotenv's constructor

Component/ErrorHandler

  • The HtmlErrorRenderer and SerializerErrorRenderer add X-Debug-Exception and X-Debug-Exception-File headers in debug mode.

Component/EventDispatcher

  • The LegacyEventDispatcherProxy class has been deprecated.
  • Added an optional dispatcher attribute to the listener and subscriber tags in RegisterListenerPass.

Component/ExpressionLanguage

  • added lint method to ExpressionLanguage class
  • added lint method to Parser class

Component/Form

  • Deprecated not configuring the rounding_mode option of the PercentType. It will default to \NumberFormatter::ROUND_HALFUP in Symfony 6.
  • Deprecated not passing a rounding mode to the constructor of PercentToLocalizedStringTransformer. It will default to \NumberFormatter::ROUND_HALFUP in Symfony 6.
  • Added collection_entry block prefix to CollectionType entries
  • Added a choice_filter option to ChoiceType
  • Added argument callable|null $filter to ChoiceListFactoryInterface::createListFromChoices() and createListFromLoader() - not defining them is deprecated.
  • Added a ChoiceList facade to leverage explicit choice list caching based on options
  • Added an AbstractChoiceLoader to simplify implementations and handle global optimizations
  • The view_timezone option defaults to the model_timezone if no reference_date is configured.
  • Implementing the FormConfigInterface without implementing the getIsEmptyCallback() method is deprecated. The method will be added to the interface in 6.0.
  • Implementing the FormConfigBuilderInterface without implementing the setIsEmptyCallback() method is deprecated. The method will be added to the interface in 6.0.
  • Added a rounding_mode option for the PercentType and correctly round the value when submitted
  • Deprecated Symfony\Component\Form\Extension\Validator\Util\ServerParams in favor of its parent class Symfony\Component\Form\Util\ServerParams
  • Added the html5 option to the ColorType to validate the input
  • Deprecated NumberToLocalizedStringTransformer::ROUND_* constants, use \NumberFormatter::ROUND_* instead

Component/HttpClient

  • added NoPrivateNetworkHttpClient decorator
  • added AmpHttpClient, a portable HTTP/2 implementation based on Amp
  • added LoggerAwareInterface to ScopingHttpClient and TraceableHttpClient
  • made HttpClient::create() return an AmpHttpClient when amphp/http-client is found but curl is not or too old

Component/HttpFoundation

  • added Cookie::withValue, Cookie::withDomain, Cookie::withExpires, Cookie::withPath, Cookie::withSecure, Cookie::withHttpOnly, Cookie::withRaw, Cookie::withSameSite
  • Deprecate Response::create(), JsonResponse::create(), RedirectResponse::create(), and StreamedResponse::create() methods (use __construct() instead)
  • added Request::preferSafeContent() and Response::setContentSafe() to handle "safe" HTTP preference according to RFC 8674
  • made the Mime component an optional dependency
  • added MarshallingSessionHandler, IdentityMarshaller
  • made Session accept a callback to report when the session is being used
  • Add support for all core cache control directives
  • Added Symfony\Component\HttpFoundation\InputBag
  • Deprecated retrieving non-string values using InputBag::get(), use InputBag::all() if you need access to the collection of values

Component/HttpKernel

  • allowed to use a specific logger channel for deprecations
  • made WarmableInterface::warmUp() return a list of classes or files to preload on PHP 7.4+; not returning an array is deprecated
  • made kernels implementing WarmableInterface be part of the cache warmup stage
  • deprecated support for service:action syntax to reference controllers, use serviceOrFqcn::method instead
  • allowed using public aliases to reference controllers
  • added session usage reporting when the _stateless attribute of the request is set to true
  • added AbstractSessionListener::onSessionUsage() to report when the session is used while a request is stateless

Component/Inflector

  • The component has been deprecated, use EnglishInflector from the String component instead.

Component/Ldap

  • Added Security\LdapBadge, Security\LdapAuthenticator and Security\CheckLdapCredentialsListener to integrate with the authenticator Security system

Component/Lock

  • added the MongoDbStore supporting MongoDB servers >=2.2

Component/Mailer/Bridge/Amazon

  • Added async-aws/ses to communicate with AWS API.

Component/Messenger/Bridge/AmazonSqs

  • Introduced the Amazon SQS bridge.
  • Added FIFO support to the SQS transport

Component/Messenger/Bridge/Amqp

  • Introduced the AMQP bridge.
  • Deprecated use of invalid options

Component/Messenger/Bridge/Doctrine

  • Introduced the Doctrine bridge.
  • Added support for PostgreSQL LISTEN/NOTIFY.

Component/Messenger/Bridge/Redis

  • Introduced the Redis bridge.
  • Added TLS option in the DSN. Example: redis://127.0.0.1?tls=1
  • Deprecated use of invalid options
  • Added ability to receive of old pending messages with new redeliver_timeout and claim_interval options.
  • Added a delete_after_ack option to the DSN as an alternative to stream_max_entries to avoid leaking memory.

Component/Messenger

  • Moved AmqpExt transport to package symfony/amqp-messenger. All classes in Symfony\Component\Messenger\Transport\AmqpExt have been moved to Symfony\Component\Messenger\Bridge\Amqp\Transport
  • Moved Doctrine transport to package symfony/doctrine-messenger. All classes in Symfony\Component\Messenger\Transport\Doctrine have been moved to Symfony\Component\Messenger\Bridge\Doctrine\Transport
  • Moved RedisExt transport to package symfony/redis-messenger. All classes in Symfony\Component\Messenger\Transport\RedisExt have been moved to Symfony\Component\Messenger\Bridge\Redis\Transport
  • Added support for passing a \Throwable argument to RetryStrategyInterface methods. This allows to define strategies based on the reason of the handling failure.
  • Added StopWorkerOnFailureLimitListener to stop the worker after a specified amount of failed messages is reached.
  • Added RecoverableExceptionInterface interface to force retry.

Component/Notifier/Bridge/Firebase

  • Added the bridge

Component/Notifier/Bridge/FreeMobile

  • Added the bridge

Component/Notifier/Bridge/Mattermost

  • Added the bridge

Component/Notifier/Bridge/OvhCloud

  • Added the bridge

Component/Notifier/Bridge/RocketChat

  • Added the bridge

Component/Notifier/Bridge/Sinch

  • Added the bridge

Component/Notifier/Bridge/Slack

  • [BC BREAK] Change API endpoint to use the Slack Incoming Webhooks API

Component/Notifier

  • [BC BREAK] The ChatMessage::fromNotification() method's $recipient and $transport arguments were removed.
  • [BC BREAK] The EmailMessage::fromNotification() and SmsMessage::fromNotification() methods' $transport argument was removed.

Component/OptionsResolver

  • added fluent configuration of options using OptionResolver::define()
  • added setInfo() and getInfo() methods
  • updated the signature of method OptionsResolver::setDeprecated() to OptionsResolver::setDeprecation(string $option, string $package, string $version, $message)
  • deprecated OptionsResolverIntrospector::getDeprecationMessage(), use OptionsResolverIntrospector::getDeprecation() instead

Component/Process

  • added Process::getStartTime() to retrieve the start time of the process as float

Component/PropertyAccess

  • Added an UninitializedPropertyException
  • Linking to PropertyInfo extractor to remove a lot of duplicate code

Component/PropertyInfo

  • Add support for extracting accessor and mutator via PHP Reflection

Component/Routing

  • added the protected method PhpFileLoader::callConfigurator() as extension point to ease custom routing configuration
  • deprecated RouteCollectionBuilder in favor of RoutingConfigurator.
  • added "priority" option to annotated routes
  • added argument $priority to RouteCollection::add()
  • deprecated the RouteCompiler::REGEX_DELIMITER constant
  • added ExpressionLanguageProvider to expose extra functions to route conditions
  • added support for a stateless keyword for configuring route stateless in PHP, YAML and XML configurations.
  • added the "hosts" option to be able to configure the host per locale.
  • added RequestContext::fromUri() to ease building the default context

Component/Security

  • Added access decision strategy to override access decisions by voter service priority
  • Added IS_ANONYMOUS, IS_REMEMBERED, IS_IMPERSONATOR
  • Hash the persistent RememberMe token value in database.
  • Added LogoutEvent to allow custom logout listeners.
  • Deprecated LogoutSuccessHandlerInterface and LogoutHandlerInterface in favor of listening on the LogoutEvent.
  • Added experimental new security using Http\Authenticator\AuthenticatorInterface, Http\Authentication\AuthenticatorManager and Http\Firewall\AuthenticatorManagerListener.
  • Added CustomUserMessageAccountStatusException to be used when extending UserCheckerInterface
  • Deprecated RememberMeServicesInterface implementations without logout(Request $request, Response $response, TokenInterface $token) method, this method will be required in Symfony 6.0.

Component/Serializer

  • added support for scalar values denormalization
  • added support for \stdClass to ObjectNormalizer
  • added the ability to ignore properties using metadata (e.g. @Symfony\Component\Serializer\Annotation\Ignore)
  • added an option to serialize constraint violations payloads (e.g. severity)

Component/String

  • added the AbstractString::reverse() method
  • made AbstractString::width() follow POSIX.1-2001
  • added LazyString which provides memoizing stringable objects
  • The component is not marked as @experimental anymore
  • added the s() helper method to get either an UnicodeString or ByteString instance, depending of the input string UTF-8 compliancy
  • added $cut parameter to Symfony\Component\String\AbstractString::truncate()
  • added AbstractString::containsAny()
  • allow passing a string of custom characters to ByteString::fromRandom()

Component/Translation

  • added support for name attribute on unit element from xliff2 to be used as a translation key instead of always the source element

Component/Uid

  • added support for UUID
  • added support for ULID
  • added the component

Component/Validator

  • added the Hostname constraint and validator
  • added the alpha3 option to the Country and Language constraints
  • allow to define a reusable set of constraints by extending the Compound constraint
  • added Sequentially constraint, to sequentially validate a set of constraints (any violation raised will prevent further validation of the nested constraints)
  • added the divisibleBy option to the Count constraint
  • added the ExpressionLanguageSyntax constraint

Component/VarDumper

  • added RdKafka support

Component/VarExporter

  • added argument array &$foundClasses to VarExporter::export() to ease with preloading exported values

Component/Workflow

  • Added context to TransitionException and its child classes whenever they are thrown in Workflow::apply()
  • Added Registry::has() to check if a workflow exists
  • Added support for $context[Workflow::DISABLE_ANNOUNCE_EVENT] = true when calling workflow->apply() to not fire the announce event

Component/Yaml

  • Added support for parsing numbers prefixed with 0o as octal numbers.
  • Deprecated support for parsing numbers starting with 0 as octal numbers. They will be parsed as strings as of Symfony 6.0. Prefix numbers with 0o so that they are parsed as octal numbers.

Bridge/Doctrine

  • added support for symfony/uid as UlidType and UuidType as Doctrine types
  • added UlidGenerator, UuidV1Generator, UuidV4Generator and UuidV6Generator

Bridge/Monolog

  • The $actionLevel constructor argument of Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy has been deprecated and replaced by the $inner one which expects an ActivationStrategyInterface to decorate instead. Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy will become final in 6.0.
  • The $actionLevel constructor argument of Symfony\Bridge\Monolog\Handler\FingersCrossed\HttpCodeActivationStrategy has been deprecated and replaced by the $inner one which expects an ActivationStrategyInterface to decorate instead. Symfony\Bridge\Monolog\Handler\FingersCrossed\HttpCodeActivationStrategy will become final in 6.0

Bridge/Twig

  • added the impersonation_exit_url() and impersonation_exit_path() functions. They return a URL that allows to switch back to the original user.
  • added the workflow_transition() function to easily retrieve a specific transition object
  • added support for translating TranslatableInterface objects
  • added the t() function to easily create TranslatableMessage objects
  • Added support for extracting messages from the t() function
  • Added field_* Twig functions to access string values from Form fields
  • changed the importance context option of NotificationEmail to allow null

Bundle/FrameworkBundle

  • Added framework.http_cache configuration tree
  • Added framework.trusted_proxies and framework.trusted_headers configuration options
  • Deprecated the public form.factory, form.type.file, translator, security.csrf.token_manager, serializer, cache_clearer, filesystem and validator services to private.
  • Added TemplateAwareDataCollectorInterface and AbstractDataCollector to simplify custom data collector creation and leverage autoconfiguration
  • Add cache.adapter.redis_tag_aware tag to use RedisCacheAwareAdapter
  • added framework.http_client.retry_failing configuration tree
  • added assertCheckboxChecked() and assertCheckboxNotChecked() in WebTestCase
  • added assertFormValue() and assertNoFormValue() in WebTestCase
  • Added "--as-tree=3" option to translation:update command to dump messages as a tree-like structure. The given value defines the level where to switch to inline YAML
  • Deprecated the lock.RESOURCE_NAME and lock.RESOURCE_NAME.store services and the lock, LockInterface, lock.store and PersistingStoreInterface aliases, use lock.RESOURCE_NAME.factory, lock.factory or LockFactory instead.

Bundle/SecurityBundle

  • Added FirewallListenerFactoryInterface, which can be implemented by security factories to add firewall listeners
  • Added SortFirewallListenersPass to make the execution order of firewall listeners configurable by leveraging Symfony\Component\Security\Http\Firewall\FirewallListenerInterface
  • Added ability to use comma separated ip address list for security.access_control
  • [BC break] Removed EntryPointFactoryInterface, authenticators must now implement AuthenticationEntryPointInterface if they require autoregistration of a Security entry point.

Bundle/TwigBundle

  • deprecated the public twig service to private

Bundle/WebProfilerBundle

  • added session usage

Component/BrowserKit

  • [BC BREAK] Request parameters are now casted to string in Request::__construct().

Component/Cache

  • added integration with Messenger to allow computing cached values in a worker
  • allow ISO 8601 time intervals to specify default lifetime

Component/Console

  • Added SingleCommandApplication::setAutoExit() to allow testing via CommandTester
  • added support for multiline responses to questions through Question::setMultiline() and Question::isMultiline()
  • Added SignalRegistry class to stack signals handlers
  • Added support for signals:
    • Added Application::getSignalRegistry() and Application::setSignalsToDispatchEvent() methods
    • Added SignalableCommandInterface interface
  • Added TableCellStyle class to customize table cell
  • Removed php prefix invocation from help messages.

Component/DependencyInjection

  • added param() and abstract_arg() in the PHP-DSL
  • deprecated Definition::setPrivate() and Alias::setPrivate(), use setPublic() instead
  • added support for the #[Required] attribute

Component/ErrorHandler

  • added the ability to set HtmlErrorRenderer::$template to a custom template to render when not in debug mode.

Component/Form

  • Added support for using the {{ label }} placeholder in constraint messages, which is replaced in the ViolationMapper by the corresponding field form label.
  • Added DataMapper, ChainAccessor, PropertyPathAccessor and CallbackAccessor with new callable getter and setter options for each form type
  • Deprecated PropertyPathMapper in favor of DataMapper and PropertyPathAccessor
  • Added an html5 option to MoneyType and PercentType, to use <input type="number" />

Component/HttpClient

  • added AsyncDecoratorTrait to ease processing responses without breaking async
  • added support for pausing responses with a new pause_handler callable exposed as an info item
  • added StreamableInterface to ease turning responses into PHP streams
  • added MockResponse::getRequestMethod() and getRequestUrl() to allow inspecting which request has been sent
  • added EventSourceHttpClient a Server-Sent events stream implementing the EventSource specification
  • added option "extra.curl" to allow setting additional curl options in CurlHttpClient
  • added RetryableHttpClient to automatically retry failed HTTP requests.
  • added extra.trace_content option to TraceableHttpClient to prevent it from keeping the content in memory

Component/HttpFoundation

  • added support for X-Forwarded-Prefix header
  • added HeaderUtils::parseQuery(): it does the same as parse_str() but preserves dots in variable names
  • added File::getContent()
  • added ability to use comma separated ip addresses for RequestMatcher::matchIps()
  • added Request::toArray() to parse a JSON request body to an array
  • added RateLimiter\RequestRateLimiterInterface and RateLimiter\AbstractRequestRateLimiter
  • deprecated not passing a Closure together with FILTER_CALLBACK to ParameterBag::filter(); wrap your filter in a closure instead.
  • Deprecated the Request::HEADER_X_FORWARDED_ALL constant, use either HEADER_X_FORWARDED_FOR | HEADER_X_FORWARDED_HOST | HEADER_X_FORWARDED_PORT | HEADER_X_FORWARDED_PROTO or HEADER_X_FORWARDED_AWS_ELB or HEADER_X_FORWARDED_TRAEFIK constants instead.
  • Deprecated BinaryFileResponse::create(), use __construct() instead

Component/HttpKernel

  • added session usage
  • made the public http_cache service handle requests when available
  • allowed enabling trusted hosts and proxies using new kernel.trusted_hosts, kernel.trusted_proxies and kernel.trusted_headers parameters
  • content of request parameter _password is now also hidden in the request profiler raw content section
  • Allowed adding attributes on controller arguments that will be passed to argument resolvers.
  • kernels implementing the ExtensionInterface will now be auto-registered to the container
  • added parameter kernel.runtime_environment, defined as %env(default:kernel.environment:APP_RUNTIME_ENV)%
  • do not set a default Accept HTTP header when using HttpKernelBrowser

Component/Lock

  • MongoDbStore does not implement BlockingStoreInterface anymore, typehint against PersistingStoreInterface instead.
  • added support for shared locks
  • added NoLock
  • deprecated NotSupportedException, it shouldn't be thrown anymore.
  • deprecated RetryTillSaveStore, logic has been moved in Lock and is not needed anymore.
  • added InMemoryStore
  • added PostgreSqlStore
  • added the LockFactory::CreateLockFromKey() method.

Component/Mailer/Bridge/Mailgun

  • Not prefixing headers with "h:" is no more deprecated

Component/Mailer/Bridge/Mailjet

  • Added the bridge

Component/Mailer/Bridge/Sendinblue

  • Added the bridge

Component/Mailer

  • added NativeTransportFactory to configure a transport based on php.ini settings
  • added local_domain, restart_threshold, restart_threshold_sleep and ping_threshold options for smtp
  • added command option for sendmail

Component/Messenger/Bridge/AmazonSqs

  • Added support for an Amazon SQS QueueUrl to be used as DSN.

Component/Messenger/Bridge/Amqp

  • Add option to confirm message delivery
  • DSN now support AMQPS out-of-the-box.

Component/Messenger/Bridge/Beanstalkd

  • Introduced the Beanstalkd bridge.

Component/Messenger/Bridge/Redis

  • Added a delete_after_reject option to the DSN to allow control over message deletion, similar to delete_after_ack.
  • Added option lazy to delay connecting to Redis server until we first use it.

Component/Messenger

  • The RedeliveryStamp will no longer be populated with error data. This information is now stored in the ErrorDetailsStamp instead.
  • Added FlattenExceptionNormalizer to give more information about the exception on Messenger background processes. The FlattenExceptionNormalizer has a higher priority than ProblemNormalizer and it is only used when the Messenger serialization context is set.
  • Added factory methods DelayStamp::delayFor(\DateInterval) and DelayStamp::delayUntil(\DateTimeInterface).
  • Removed the exception when dispatching a message with a DispatchAfterCurrentBusStamp and not in a context of another dispatch call
  • Added WorkerMessageRetriedEvent
  • Added WorkerMessageReceivedEvent::setEnvelope() and made event mutable

Component/Mime

  • Add support for DKIM
  • Deprecated Address::fromString(), use Address::create() instead

Component/Notifier/Bridge/Discord

  • Added the bridge

Component/Notifier/Bridge/Esendex

  • Added the bridge

Component/Notifier/Bridge/GoogleChat

  • Added the bridge

Component/Notifier/Bridge/Infobip

  • Added the bridge

Component/Notifier/Bridge/LinkedIn

  • Added the bridge

Component/Notifier/Bridge/Mobyt

  • Added the bridge

Component/Notifier/Bridge/Sendinblue

  • Added the bridge

Component/Notifier/Bridge/Slack

  • [BC BREAK] Reverted the 5.1 change and use the Slack Web API again (same as 5.0)

Component/Notifier/Bridge/Smsapi

  • Add the bridge

Component/Notifier/Bridge/Zulip

  • Added the bridge

Component/Notifier

  • [BC BREAK] The TransportInterface::send() and AbstractTransport::doSend() methods changed to return a ?SentMessage instance instead of void.
  • The EmailRecipientInterface and RecipientInterface were introduced.
  • Added email and phone properties to Recipient.
  • [BC BREAK] Changed the type-hint of the $recipient argument in the as*Message() method of EmailNotificationInterface and SmsNotificationInterface to EmailRecipientInterface and SmsRecipientInterface.
  • [BC BREAK] Removed the AdminRecipient.
  • The EmailRecipientInterface and SmsRecipientInterface now extend the RecipientInterface.
  • The EmailRecipient and SmsRecipient were introduced.
  • [BC BREAK] Changed the type-hint of the $recipient argument in NotifierInterface::send(), Notifier::getChannels(), ChannelInterface::notifiy() and ChannelInterface::supports() to RecipientInterface.
  • Changed EmailChannel to only support recipients which implement the EmailRecipientInterface.
  • Changed SmsChannel to only support recipients which implement the SmsRecipientInterface.

Component/Process

  • added Process::setOptions() to set Process specific options
  • added option create_new_console to allow a subprocess to continue to run after the main script exited, both on Linux and on Windows

Component/PropertyAccess

  • deprecated passing a boolean as the first argument of PropertyAccessor::__construct(), expecting a combination of bitwise flags instead
  • added the ability to disable usage of the magic __get & __set methods

Component/PropertyInfo

  • deprecated the enable_magic_call_extraction context option in ReflectionExtractor::getWriteInfo() and ReflectionExtractor::getReadInfo(). in favor of enable_magic_methods_extraction

Component/RateLimiter

  • added the component

Component/Routing

  • Added support for inline definition of requirements and defaults for host
  • Added support for \A and \z as regex start and end for route requirement
  • Added support for #[Route] attributes

Component/Security

  • Added attributes on Passport
  • Changed AuthorizationChecker to call the access decision manager in unauthenticated sessions with a NullToken
  • [BC break] Removed AccessListener::PUBLIC_ACCESS in favor of AuthenticatedVoter::PUBLIC_ACCESS
  • Added Passport to LoginFailureEvent.
  • Deprecated setProviderKey()/getProviderKey() in favor of setFirewallName()/getFirewallName() in PreAuthenticatedToken, RememberMeToken, SwitchUserToken, UsernamePasswordToken, DefaultAuthenticationSuccessHandler; and deprecated the AbstractRememberMeServices::$providerKey property in favor of AbstractRememberMeServices::$firewallName
  • Added FirewallListenerInterface to make the execution order of firewall listeners configurable
  • Added translator to \Symfony\Component\Security\Http\Authenticator\JsonLoginAuthenticator and \Symfony\Component\Security\Http\Firewall\UsernamePasswordJsonAuthenticationListener to translate authentication failure messages
  • Added a CurrentUser attribute to force the UserValueResolver to resolve an argument to the current user.
  • Added LoginThrottlingListener.
  • Added LoginLinkAuthenticator.
  • Moved methods supports() and authenticate() from AbstractListener to FirewallListenerInterface.
  • [BC break] PasswordUpgradeBadge::getPasswordUpgrader() changed its return type to return null or a PasswordUpgraderInterface implementation.

Component/Semaphore

  • Introduced the component as experimental

Component/Serializer

  • added CompiledClassMetadataFactory and ClassMetadataFactoryCompiler for faster metadata loading.
  • added UidNormalizer
  • added FormErrorNormalizer
  • added MimeMessageNormalizer
  • serializer mapping can be configured using php attributes

Component/Stopwatch

  • Add name argument to the StopWatchEvent constructor, accessible via a new StopwatchEvent::getName()

Component/String

  • added a FrenchInflector class

Component/Translation

  • added support for calling trans with ICU formatted messages
  • added PseudoLocalizationTranslator
  • added TranslatableMessage objects that represent a message that can be translated
  • added the t() function to easily create TranslatableMessage objects
  • Added support for extracting messages from TranslatableMessage objects

Component/Uid

  • made UUIDv6 always return truly random node fields to prevent leaking the MAC of the host

Component/Validator

  • added a Cascade constraint to ease validating nested typed object properties
  • deprecated the allowEmptyString option of the Length constraint

Component/VarDumper

  • added support for PHPUnit --colors option
  • added VAR_DUMPER_FORMAT=server env var value support
  • prevent replacing the handler when the VAR_DUMPER_FORMAT env var is set

Component/Workflow

  • Added Workflow::getEnabledTransition() to easily retrieve a specific transition object
  • Added context to the event dispatched
  • Dispatch an event when the subject enters in the workflow for the very first time
  • Added a default context to the previous event
  • Added support for specifying which events should be dispatched when calling workflow->apply()

Bridge/Doctrine

  • Deprecate UserLoaderInterface::loadUserByUsername() in favor of `UserLoaderInterface::loadUserByIdentifier()
  • Deprecate DoctrineTestHelper and TestRepositoryFactory
  • [BC BREAK] Remove UuidV*Generator classes
  • Add UuidGenerator
  • Add support for the new security-core TokenVerifierInterface in DoctrineTokenProvider, fixing parallel requests handling in remember-me

Bridge/Monolog

  • Add ResetLoggersWorkerSubscriber to reset buffered logs in messenger workers

Bridge/PhpUnit

  • bumped the minimum PHP version to 7.1.3
  • bumped the minimum PHPUnit version to 7.5
  • deprecated the SetUpTearDownTrait trait, use original methods with "void" return typehint.
  • added logFile option to write deprecations to a file instead of echoing them

Bridge/Twig

  • Add a new markAsPublic method on NotificationEmail to change the importance context option to null after creation
  • Add a new fragment_uri() helper to generate the URI of a fragment
  • Add support of Bootstrap 5 for form theming
  • Add a new serialize filter to serialize objects using the Serializer component

Bundle/FrameworkBundle

  • Deprecate the session.storage alias and session.storage.* services, use the session.storage.factory alias and session.storage.factory.* services instead
  • Deprecate the framework.session.storage_id configuration option, use the framework.session.storage_factory_id configuration option instead
  • Deprecate the session service and the SessionInterface alias, use the Request::getSession() or the new RequestStack::getSession() methods instead
  • Add AbstractController::renderForm() to render a form and set the appropriate HTTP status code
  • Add support for configuring PHP error level to log levels
  • Add the dispatcher option to debug:event-dispatcher
  • Add the event_dispatcher.dispatcher tag
  • Add assertResponseFormatSame() in BrowserKitAssertionsTrait
  • Add support for configuring UUID factory services
  • Add tag assets.package to register asset packages
  • Add support to use a PSR-6 compatible cache for Doctrine annotations
  • Deprecate all other values than "none", "php_array" and "file" for framework.annotation.cache
  • Add KernelTestCase::getContainer() as the best way to get a container in tests
  • Rename the container parameter profiler_listener.only_master_requests to profiler_listener.only_main_requests
  • Add service fragment.uri_generator to generate the URI of a fragment
  • Deprecate registering workflow services as public
  • Deprecate option --xliff-version of the translation:update command, use e.g. --format=xlf20 instead
  • Deprecate option --output-format of the translation:update command, use e.g. --format=xlf20 instead

Bundle/SecurityBundle

  • The authenticator system is no longer experimental
  • Login Link functionality is no longer experimental
  • Add required_badges firewall config option
  • [BC break] Add login_throttling.lock_factory setting defaulting to null (instead of lock.factory)
  • Add a login_throttling.interval (in security.firewalls) option to change the default throttling interval.
  • Add the debug:firewall command.
  • Deprecate UserPasswordEncoderCommand class and the corresponding user:encode-password command, use UserPasswordHashCommand and user:hash-password instead
  • Deprecate the security.encoder_factory.generic service, the security.encoder_factory and Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface aliases, use security.password_hasher_factory and Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface instead
  • Deprecate the security.user_password_encoder.generic service, the security.password_encoder and the Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface aliases, use security.user_password_hasher, security.password_hasher and Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface instead
  • Deprecate the public security.authorization_checker and security.token_storage services to private
  • Not setting the enable_authenticator_manager config option to true is deprecated
  • Deprecate the security.authentication.provider.* services, use the new authenticator system instead
  • Deprecate the security.authentication.listener.* services, use the new authenticator system instead
  • Deprecate the Guard component integration, use the new authenticator system instead

Bundle/TwigBundle

  • Add support for the new serialize filter (from Twig Bridge)

Component/Asset

  • deprecated RemoteJsonManifestVersionStrategy, use JsonManifestVersionStrategy instead.

Component/BrowserKit

  • Added jsonRequest method to AbstractBrowser
  • Allowed sending a body with GET requests when a content-type is defined

Component/Cache

  • added support for connecting to Redis Sentinel clusters when using the Redis PHP extension
  • add support for a custom serializer to the ApcuAdapter class

Component/Console

  • Add GithubActionReporter to render annotations in a Github Action
  • Add InputOption::VALUE_NEGATABLE flag to handle --foo/--no-foo options
  • Add the Command::$defaultDescription static property and the description attribute on the console.command tag to allow the list command to instantiate commands lazily
  • Add option --short to the list command
  • Add support for bright colors
  • Add #[AsCommand] attribute for declaring commands on PHP 8
  • Add Helper::width() and Helper::length()
  • The --ansi and --no-ansi options now default to null.

Component/DependencyInjection

  • Add ServicesConfigurator::remove() in the PHP-DSL
  • Add %env(not:...)% processor to negate boolean values
  • Add support for loading autoconfiguration rules via the #[Autoconfigure] and #[AutoconfigureTag] attributes on PHP 8
  • Add #[AsTaggedItem] attribute for defining the index and priority of classes found in tagged iterators/locators
  • Add autoconfigurable attributes
  • Add support for autowiring tagged iterators and locators via attributes on PHP 8
  • Add support for per-env configuration in XML and Yaml loaders
  • Add ContainerBuilder::willBeAvailable() to help with conditional configuration
  • Add support an integer return value for default_index_method
  • Add #[When(env: 'foo')] to skip autoregistering a class when the env doesn't match
  • Add env() and EnvConfigurator in the PHP-DSL
  • Add support for ConfigBuilder in the PhpFileLoader
  • Add ContainerConfigurator::env() to get the current environment
  • Add #[Target] to tell how a dependency is used and hint named autowiring aliases

Component/DomCrawler

  • The parents() method is deprecated. Use ancestors() instead.
  • Marked the containsOption(), availableOptionValues(), and disableValidation() methods of the ChoiceFormField class as internal

Component/EventDispatcher

  • Add #[AsEventListener] attribute for declaring listeners on PHP 8

Component/Form

  • Changed $forms parameter type of the DataMapperInterface::mapDataToForms() method from iterable to \Traversable.
  • Changed $forms parameter type of the DataMapperInterface::mapFormsToData() method from iterable to \Traversable.
  • Deprecated passing an array as the second argument of the DataMapper::mapDataToForms() method, pass \Traversable instead.
  • Deprecated passing an array as the first argument of the DataMapper::mapFormsToData() method, pass \Traversable instead.
  • Deprecated passing an array as the second argument of the CheckboxListMapper::mapDataToForms() method, pass \Traversable instead.
  • Deprecated passing an array as the first argument of the CheckboxListMapper::mapFormsToData() method, pass \Traversable instead.
  • Deprecated passing an array as the second argument of the RadioListMapper::mapDataToForms() method, pass \Traversable instead.
  • Deprecated passing an array as the first argument of the RadioListMapper::mapFormsToData() method, pass \Traversable instead.
  • Added a choice_translation_parameters option to ChoiceType
  • Add UuidType and UlidType
  • Dependency on symfony/intl was removed. Install symfony/intl if you are using LocaleType, CountryType, CurrencyType, LanguageType or TimezoneType.
  • Add priority option to BaseType and sorting view fields

Component/HttpClient

  • Implement HttpClientInterface::withOptions() from symfony/contracts v2.4
  • Add DecoratorTrait to ease writing simple decorators

Component/HttpFoundation

  • Add the SessionFactory, NativeSessionStorageFactory, PhpBridgeSessionStorageFactory and MockFileSessionStorageFactory classes
  • Calling Request::getSession() when there is no available session throws a SessionNotFoundException
  • Add the RequestStack::getSession method
  • Deprecate the NamespacedAttributeBag class
  • Add ResponseFormatSame PHPUnit constraint
  • Deprecate the RequestStack::getMasterRequest() method and add getMainRequest() as replacement

Component/HttpKernel

  • Deprecate ArgumentInterface
  • Add ArgumentMetadata::getAttributes()
  • Deprecate ArgumentMetadata::getAttribute(), use getAttributes() instead
  • Mark the class Symfony\Component\HttpKernel\EventListener\DebugHandlersListener as internal
  • Deprecate returning a ContainerBuilder from KernelInterface::registerContainerConfiguration()
  • Deprecate HttpKernelInterface::MASTER_REQUEST and add HttpKernelInterface::MAIN_REQUEST as replacement
  • Deprecate KernelEvent::isMasterRequest() and add isMainRequest() as replacement
  • Add #[AsController] attribute for declaring standalone controllers on PHP 8
  • Add FragmentUriGeneratorInterface and FragmentUriGenerator to generate the URI of a fragment

Component/Intl

  • Add Currencies::getCashFractionDigits() and Currencies::getCashRoundingIncrement()

Component/Ldap

  • The authenticator system is no longer experimental
  • Added caseSensitive option for attribute keys in the Entry class.

Component/Mailer/Bridge/Amazon

  • Add support for X-SES-SOURCE-ARN

Component/Mailer

  • added the mailer monolog channel and set it on all transport definitions

Component/Messenger/Bridge/AmazonSqs

  • Added new debug option to log HTTP requests and responses.
  • Allowed for receiver & sender injection into AmazonSqsTransport
  • Add X-Ray trace header support to the SQS transport

Component/Messenger/Bridge/Amqp

  • Deprecated the prefetch_count parameter, it has no effect and will be removed in Symfony 6.0.
  • AmqpReceiver implements QueueReceiverInterface to fetch messages from a specific set of queues.
  • Add ability to distinguish retry and delay actions

Component/Messenger/Bridge/Redis

  • Add rediss:// DSN scheme support for TLS protocol
  • Deprecate TLS option, use rediss://127.0.0.1 instead of redis://127.0.0.1?tls=1
  • Add support for \RedisCluster instance in Connection constructor
  • Add support for Redis Cluster in DSN

Component/Messenger

  • Add the RouterContextMiddleware to restore the original router context when handling a message
  • InMemoryTransport can perform message serialization through dsn in-memory://?serialize=true.
  • Added queues option to Worker to only fetch messages from a specific queue from a receiver implementing QueueReceiverInterface.

Component/Notifier/Bridge/AllMySms

  • Add the bridge

Component/Notifier/Bridge/Clickatell

  • Add the bridge

Component/Notifier/Bridge/Discord

  • The bridge is not marked as @experimental anymore

Component/Notifier/Bridge/Esendex

  • The bridge is not marked as @experimental anymore
  • [BC BREAK] Change signature of EsendexTransport::__construct() method from: public function __construct(string $token, string $accountReference, string $from, HttpClientInterface $client = null, EventDispatcherInterface $dispatcher = null) to: public function __construct(string $email, string $password, string $accountReference, string $from, HttpClientInterface $client = null, EventDispatcherInterface $dispatcher = null)

Component/Notifier/Bridge/FakeChat

  • Add the bridge

Component/Notifier/Bridge/FakeSms

  • Add the bridge

Component/Notifier/Bridge/Firebase

  • The bridge is not marked as @experimental anymore
  • Add data field to options

Component/Notifier/Bridge/FreeMobile

  • The bridge is not marked as @experimental anymore

Component/Notifier/Bridge/GatewayApi

  • Add the bridge

Component/Notifier/Bridge/Gitter

  • Add the bridge

Component/Notifier/Bridge/GoogleChat

  • The bridge is not marked as @experimental anymore
  • [BC BREAK] Remove GoogleChatTransport::setThreadKey() method, this parameter should now be provided via the constructor, which has changed from: __construct(string $space, string $accessKey, string $accessToken, HttpClientInterface $client = null, EventDispatcherInterface $dispatcher = null) to: __construct(string $space, string $accessKey, string $accessToken, string $threadKey = null, HttpClientInterface $client = null, EventDispatcherInterface $dispatcher = null)
  • [BC BREAK] Rename the parameter threadKey to thread_key in DSN

Component/Notifier/Bridge/Infobip

  • The bridge is not marked as @experimental anymore

Component/Notifier/Bridge/Iqsms

  • Added the bridge

Component/Notifier/Bridge/LightSms

  • Add the bridge

Component/Notifier/Bridge/LinkedIn

  • The bridge is not marked as @experimental anymore
  • [BC BREAK] LinkedInTransportFactory is now final

Component/Notifier/Bridge/Mattermost

  • The bridge is not marked as @experimental anymore
  • [BC BREAK] Change signature of MattermostTransport::__construct() method from: public function __construct(string $token, string $channel, HttpClientInterface $client = null, EventDispatcherInterface $dispatcher = null, string $path = null) to: public function __construct(string $token, string $channel, ?string $path = null, HttpClientInterface $client = null, EventDispatcherInterface $dispatcher = null)

Component/Notifier/Bridge/Mercure

  • Add the bridge

Component/Notifier/Bridge/MessageBird

  • Add the bridge

Component/Notifier/Bridge/MicrosoftTeams

  • Add the bridge

Component/Notifier/Bridge/Mobyt

  • The bridge is not marked as @experimental anymore
  • Validate message types

Component/Notifier/Bridge/Nexmo

  • The bridge is not marked as @experimental anymore

Component/Notifier/Bridge/Octopush

  • Add the bridge

Component/Notifier/Bridge/OvhCloud

  • Add sender option to the DSN that allows configuring the sender
  • The bridge is not marked as @experimental anymore

Component/Notifier/Bridge/RocketChat

  • The bridge is not marked as @experimental anymore

Component/Notifier/Bridge/Sendinblue

  • The bridge is not marked as @experimental anymore

Component/Notifier/Bridge/Sinch

  • The bridge is not marked as @experimental anymore

Component/Notifier/Bridge/Slack

  • The bridge is not marked as @experimental anymore
  • Check for maximum number of buttons in Slack action block
  • Add HeaderBlock
  • Slack access tokens needs to start with "xox" (see https://api.slack.com/authentication/token-types)
  • Add SlackOptions::threadTs() to send message as reply

Component/Notifier/Bridge/SmsBiuras

  • Add the bridge

Component/Notifier/Bridge/SpotHit

  • Add the bridge

Component/Notifier/Bridge/Telegram

  • The bridge is not marked as @experimental anymore

Component/Notifier/Bridge/Twilio

  • The bridge is not marked as @experimental anymore

Component/Notifier/Bridge/Zulip

  • The bridge is not marked as @experimental anymore
  • [BC BREAK] ZulipTransport is now final
  • [BC BREAK] ZulipTransportFactory is now final

Component/Notifier

  • The component is not marked as @experimental anymore
  • [BC BREAK] Change signature of Dsn::__construct() method from: public function __construct(string $scheme, string $host, ?string $user = null, ?string $password = null, ?int $port = null, array $options = [], ?string $path = null) to: public function __construct(string $dsn)
  • [BC BREAK] Remove Dsn::fromString() method
  • [BC BREAK] Changed the return type of AbstractTransportFactory::getEndpoint() from ?string to string
  • Added DSN::getRequiredOption method which throws a new MissingRequiredOptionException.

Component/OptionsResolver

  • Add prototype definition for nested options

Component/PasswordHasher

  • Add the component
  • Use bcrypt as default algorithm in NativePasswordHasher

Component/PropertyInfo

  • Add support for multiple types for collection keys & values
  • Deprecate the Type::getCollectionKeyType() and Type::getCollectionValueType() methods, use Type::getCollectionKeyTypes() and Type::getCollectionValueTypes() instead

Component/Routing

  • Already encoded slashes are not decoded nor double-encoded anymore when generating URLs
  • Add support for per-env configuration in XML and Yaml loaders
  • Deprecate creating instances of the Route annotation class by passing an array of parameters
  • Add RoutingConfigurator::env() to get the current environment

Component/Security

  • Deprecate the Guard component
  • Deprecate AuthenticationManagerInterface, AuthenticationProviderManager, AnonymousAuthenticationProvider, AuthenticationProviderInterface, DaoAuthenticationProvider, LdapBindAuthenticationProvider, PreAuthenticatedAuthenticationProvider, RememberMeAuthenticationProvider, UserAuthenticationProvider and AuthenticationFailureEvent from security-core. Use the new authenticator system instead
  • Deprecate AbstractAuthenticationListener, AbstractPreAuthenticatedListener, AnonymousAuthenticationListener, BasicAuthenticationListener, RememberMeListener, RemoteUserAuthenticationListener, UsernamePasswordFormAuthenticationListener, UsernamePasswordJsonAuthenticationListener and X509AuthenticationListener from security-http, use the new authenticator system instead
  • Add getPassport() method and a second $passport constructor argument to AuthenticationTokenCreatedEvent
  • The authenticator system is no longer experimental
  • Login Link functionality is no longer experimental
  • Add RememberMeConditionsListener to check if remember me is requested and supported, and set priority of RememberMeListener to -63
  • Add RememberMeHandlerInterface and implementations, used as a replacement of RememberMeServicesInterface when using the AuthenticatorManager
  • Add TokenDeauthenticatedEvent that is dispatched when the current security token is deauthenticated
  • [BC break] Change constructor signature of LoginLinkHandler to __construct(UrlGeneratorInterface $urlGenerator, UserProviderInterface $userProvider, SignatureHasher $signatureHashUtil, array $options)
  • Add Core\Signature\SignatureHasher and moved Http\LoginLink\ExpiredLoginLinkStorage to Core\Signature\ExpiredLoginLinkStorage
  • Deprecate PersistentTokenInterface::getUsername() in favor of PersistentTokenInterface::getUserIdentifier()
  • Deprecate UsernameNotFoundException in favor of UserNotFoundException and getUsername()/setUsername() in favor of getUserIdentifier()/setUserIdentifier()
  • Deprecate UserProviderInterface::loadUserByUsername() in favor of UserProviderInterface::loadUserByIdentifier()
  • Deprecate TokenInterface::getUsername() in favor of TokenInterface::getUserIdentifier()
  • Deprecate UserInterface::getUsername() in favor of getUserIdentifier()
  • Add PassportInterface:getBadges(), implemented by PassportTrait
  • [BC BREAK] Remove method checkIfCompletelyResolved() from PassportInterface, checking that passport badges are resolved is up to AuthenticatorManager
  • Deprecate class User, use InMemoryUser instead
  • Deprecate class UserChecker, use InMemoryUserChecker or your own implementation instead
  • [BC break] Remove support for passing a UserInterface implementation to Passport, use the UserBadge instead.
  • Add PasswordAuthenticatedUserInterface for user classes that use passwords
  • Add LegacyPasswordAuthenticatedUserInterface for user classes that use user-provided salts in addition to passwords
  • Deprecate all classes in the Core\Encoder\ sub-namespace, use the PasswordHasher component instead
  • Deprecate the SessionInterface $session constructor argument of SessionTokenStorage, inject a \Symfony\Component\HttpFoundation\RequestStack $requestStack instead
  • Deprecate the session service provided by the ServiceLocator injected in UsageTrackingTokenStorage, provide a request_stack service instead
  • Deprecate using SessionTokenStorage outside a request context, it will throw a SessionNotFoundException in Symfony 6.0
  • Randomize CSRF tokens to harden BREACH attacks
  • Deprecated voters that do not return a valid decision when calling the vote method.
  • Flag Serializable implementation of NullToken as @internal and @final
  • Add TokenVerifierInterface to allow fixing parallel requests handling in remember-me
  • Add a CacheTokenVerifier implementation that stores outdated token in a cache, which is more correct and efficient as the default DoctrineTokenProvider implementation

Component/Security/Core

The CHANGELOG for version 5.3 and earlier can be found at https://github.com/symfony/symfony/blob/5.3/src/Symfony/Component/Security/CHANGELOG.md

Component/Security/Csrf

The CHANGELOG for version 5.3 and earlier can be found at https://github.com/symfony/symfony/blob/5.3/src/Symfony/Component/Security/CHANGELOG.md

Component/Security/Guard

The CHANGELOG for version 5.3 and earlier can be found at https://github.com/symfony/symfony/blob/5.3/src/Symfony/Component/Security/CHANGELOG.md

Component/Security/Http

The CHANGELOG for version 5.3 and earlier can be found at https://github.com/symfony/symfony/blob/5.3/src/Symfony/Component/Security/CHANGELOG.md

Component/Semaphore

  • The component is not marked as @experimental anymore

Component/Serializer

  • Add the ability to provide (de)normalization context using metadata (e.g. @Symfony\Component\Serializer\Annotation\Context)
  • Deprecate ArrayDenormalizer::setSerializer(), call setDenormalizer() instead
  • Add normalization formats to UidNormalizer
  • Add CsvEncoder::END_OF_LINE context option
  • Deprecate creating instances of the annotation classes by passing an array of parameters, use named arguments instead

Component/String

  • Made AsciiSlugger fallback to parent locale's symbolsMap

Component/Translation/Bridge/Crowdin

  • Create the bridge

Component/Translation/Bridge/Loco

  • Create the bridge

Component/Translation/Bridge/Lokalise

  • Create the bridge

Component/Translation

  • Add translation:pull and translation:push commands to manage translations with third-party providers
  • Add TranslatorBagInterface::getCatalogues method
  • Add support to load XLIFF string in XliffFileLoader

Component/Uid

  • The component is not marked as @experimental anymore
  • Add AbstractUid::fromBinary(), AbstractUid::fromBase58(), AbstractUid::fromBase32() and AbstractUid::fromRfc4122()
  • [BC BREAK] Replace UuidV1::getTime(), UuidV6::getTime() and Ulid::getTime() by UuidV1::getDateTime(), UuidV6::getDateTime() and Ulid::getDateTime()
  • Add Uuid::NAMESPACE_* constants from RFC4122
  • Add UlidFactory, UuidFactory, RandomBasedUuidFactory, TimeBasedUuidFactory and NameBasedUuidFactory
  • Add commands to generate and inspect UUIDs and ULIDs

Component/Workflow

  • Deprecate InvalidTokenConfigurationException
  • Added MermaidDumper to dump Workflow graphs in the Mermaid.js flowchart format

Component/Yaml

  • Added github format support & autodetection to render errors as annotations when running the YAML linter command in a Github Action environment.

Bridge/Doctrine

  • Add DoctrineOpenTransactionLoggerMiddleware to log when a transaction has been left open
  • Deprecate PdoCacheAdapterDoctrineSchemaSubscriber and add DoctrineDbalCacheAdapterSchemaSubscriber instead
  • UniqueEntity constraint retrieves a maximum of two entities if the default repository method is used.
  • Add support for the newer bundle structure to AbstractDoctrineExtension::loadMappingInformation()
  • Add argument $bundleDir to AbstractDoctrineExtension::getMappingDriverBundleConfigDefaults()
  • Add argument $bundleDir to AbstractDoctrineExtension::getMappingResourceConfigDirectory()

Bridge/Monolog

  • Deprecate ResetLoggersWorkerSubscriber to reset buffered logs in messenger workers, use "reset_on_message" option in messenger configuration instead.

Bridge/Twig

  • Add github format & autodetection to render errors as annotations when running the Twig linter command in a Github Actions environment.

Bundle/FrameworkBundle

  • Add set_locale_from_accept_language config option to automatically set the request locale based on the Accept-Language HTTP request header and the framework.enabled_locales config option
  • Add set_content_language_from_locale config option to automatically set the Content-Language HTTP response header based on the Request locale
  • Deprecate the framework.translator.enabled_locales, use framework.enabled_locales instead
  • Add autowiring alias for HttpCache\StoreInterface
  • Add the ability to enable the profiler using a request query parameter, body parameter or attribute
  • Deprecate the AdapterInterface autowiring alias, use CacheItemPoolInterface instead
  • Deprecate the public profiler service to private
  • Deprecate get(), has(), getDoctrine(), and dispatchMessage() in AbstractController, use method/constructor injection instead
  • Deprecate the cache.adapter.doctrine service
  • Add support for resetting container services after each messenger message
  • Add configureContainer(), configureRoutes(), getConfigDir() and getBundlesPath() to MicroKernelTrait
  • Add support for configuring log level, and status code by exception class
  • Bind the default_context parameter onto serializer's encoders and normalizers
  • Add support for statusCode default parameter when loading a template directly from route using the Symfony\Bundle\FrameworkBundle\Controller\TemplateController controller
  • Deprecate translation:update command, use translation:extract instead
  • Add PhpStanExtractor support for the PropertyInfo component
  • Add cache.adapter.doctrine_dbal service to replace cache.adapter.pdo when a Doctrine DBAL connection is used.

Bundle/SecurityBundle

  • Deprecate FirewallConfig::getListeners(), use FirewallConfig::getAuthenticators() instead
  • Deprecate security.authentication.basic_entry_point and security.authentication.retry_entry_point services, the logic is moved into the HttpBasicAuthenticator and ChannelListener respectively
  • Deprecate FirewallConfig::allowsAnonymous() and the allows_anonymous from the data collector data, there will be no anonymous concept as of version 6.
  • Deprecate not setting $authenticatorManagerEnabled to true in SecurityDataCollector and DebugFirewallCommand
  • Deprecate SecurityFactoryInterface and SecurityExtension::addSecurityListenerFactory() in favor of AuthenticatorFactoryInterface and SecurityExtension::addAuthenticatorFactory()
  • Add AuthenticatorFactoryInterface::getPriority() which replaces SecurityFactoryInterface::getPosition()
  • Deprecate passing an array of arrays as 1st argument to MainConfiguration, pass a sorted flat array of factories instead.
  • Deprecate the always_authenticate_before_granting option
  • Display the roles of the logged-in user in the Web Debug Toolbar
  • Add the security.access_decision_manager.strategy_service option
  • Deprecate not configuring explicitly a provider for custom_authenticators when there is more than one registered provider

Bundle/WebProfilerBundle

  • Add a "preview" tab in mailer profiler for HTML email

Component/Cache

  • Deprecate DoctrineProvider and DoctrineAdapter because these classes have been added to the doctrine/cache package
  • Add DoctrineDbalAdapter identical to PdoAdapter for Doctrine\DBAL\Connection or DBAL URL
  • Deprecate usage of PdoAdapter with Doctrine\DBAL\Connection or DBAL URL

Component/Console

  • Add TesterTrait::assertCommandIsSuccessful() to test command
  • Deprecate HelperSet::setCommand() and getCommand() without replacement

Component/DomCrawler

  • Add Crawler::innerText method.

Component/Dotenv

  • Add dotenv:dump command to compile the contents of the .env files into a PHP-optimized file called .env.local.php
  • Add debug:dotenv command to list all dotenv files with variables and values
  • Add $overrideExistingVars on Dotenv::bootEnv() and Dotenv::loadEnv()

Component/ErrorHandler

  • Make DebugClassLoader trigger deprecation notices on missing return types
  • Add SYMFONY_PATCH_TYPE_DECLARATIONS='force=2' mode to DebugClassLoader to turn annotations into native return types

Component/EventDispatcher

  • Allow #[AsEventListener] attribute on methods

Component/Filesystem

  • Add Path class
  • Add $lock argument to Filesystem::appendToFile()

Component/Finder

  • Deprecate Comparator::setTarget() and Comparator::setOperator()
  • Add a constructor to Comparator that allows setting target and operator
  • Finder's iterator has now Symfony\Component\Finder\SplFileInfo inner type specified
  • Add recursive .gitignore files support

Component/Form

  • Deprecate calling FormErrorIterator::children() if the current element is not iterable.
  • Allow to pass TranslatableMessage objects to the help option
  • Add the EnumType

Component/HttpClient

  • Add MockHttpClient::setResponseFactory() method to be able to set response factory after client creating

Component/HttpFoundation

  • Deprecate passing null as $requestIp to IpUtils::__checkIp(), IpUtils::__checkIp4() or IpUtils::__checkIp6(), pass an empty string instead.
  • Add the litespeed_finish_request method to work with Litespeed
  • Deprecate upload_progress.* and url_rewriter.tags session options
  • Allow setting session options via DSN

Component/HttpKernel

  • Add the ability to enable the profiler using a request query parameter, body parameter or attribute
  • Deprecate AbstractTestSessionListener and TestSessionListener, use AbstractSessionListener and SessionListener instead
  • Deprecate the fileLinkFormat parameter of DebugHandlersListener
  • Add support for configuring log level, and status code by exception class
  • Allow ignoring "kernel.reset" methods that don't exist with "on_invalid" attribute

Component/Lock

  • Add DoctrineDbalStore identical to PdoStore for Doctrine\DBAL\Connection or DBAL url
  • Deprecate usage of PdoStore with Doctrine\DBAL\Connection or DBAL url
  • Add DoctrineDbalPostgreSqlStore identical to PdoPostgreSqlStore for Doctrine\DBAL\Connection or DBAL url
  • Deprecate usage of PdoPostgreSqlStore with Doctrine\DBAL\Connection or DBAL url

Component/Mailer/Bridge/OhMySmtp

  • Add the bridge

Component/Mailer/Bridge/Sendgrid

  • Add support for TagHeader and MetadataHeader to the Sendgrid API transport

Component/Mailer

  • Enable the mailer to operate on any PSR-14-compatible event dispatcher

Component/Messenger/Bridge/Redis

  • Deprecate not setting the delete_after_ack config option (or DSN parameter), its default value will change to true in 6.0

Component/Messenger

  • Add AsMessageHandler attribute for declaring message handlers on PHP 8.
  • Add support for handling messages in batches with BatchHandlerInterface and corresponding trait
  • Add StopWorkerExceptionInterface and its implementation StopWorkerException to stop the worker.
  • Add support for resetting container services after each messenger message.
  • Added WorkerMetadata class which allows you to access the configuration details of a worker, like queueNames and transportNames it consumes from.
  • New method getMetadata() was added to Worker class which returns the WorkerMetadata object.
  • Deprecate not setting the reset_on_message config option, its default value will change to true in 6.0
  • Add log when worker should stop.
  • Add log when SIGTERM is received.

Component/Notifier/Bridge/AmazonSns

  • Add the bridge

Component/Notifier/Bridge/Esendex

  • Add returned message ID to SentMessage

Component/Notifier/Bridge/Expo

  • Add the bridge

Component/Notifier/Bridge/FakeChat

  • Add the FakeChatLoggerTransport

Component/Notifier/Bridge/FakeSms

  • Add the FakeSmsLoggerTransport

Component/Notifier/Bridge/Mailjet

  • Add the bridge

Component/Notifier/Bridge/MessageMedia

  • Add the bridge

Component/Notifier/Bridge/OneSignal

  • Add the bridge

Component/Notifier/Bridge/Sms77

  • Add the bridge

Component/Notifier/Bridge/Smsc

  • Add the bridge

Component/Notifier/Bridge/Telnyx

  • Add the bridge

Component/Notifier/Bridge/TurboSms

  • Add the bridge

Component/Notifier/Bridge/Twilio

  • Ensure sender/from is valid via regex

Component/Notifier/Bridge/Vonage

  • Add the bridge

Component/Notifier/Bridge/Yunpian

  • Add the bridge

Component/Notifier

  • Add SentMessageEvent and FailedMessageEvent
  • Add push channel

Component/PropertyInfo

  • Add PhpStanExtractor

Component/RateLimiter

  • The component is not experimental anymore
  • Add support for long intervals (months and years)

Component/Runtime

  • The component is not experimental anymore
  • Add options "env_var_name" and "debug_var_name" to GenericRuntime and SymfonyRuntime
  • Add option "dotenv_overload" to SymfonyRuntime

Component/Security/Core

  • Add a CacheableVoterInterface for voters that vote only on identified attributes and subjects
  • Deprecate AuthenticationEvents::AUTHENTICATION_FAILURE, use the LoginFailureEvent instead
  • Deprecate AnonymousToken, as the related authenticator was deprecated in 5.3
  • Deprecate Token::getCredentials(), tokens should no longer contain credentials (as they represent authenticated sessions)
  • Deprecate returning string|\Stringable from Token::getUser() (it must return a UserInterface)
  • Deprecate AuthenticatedVoter::IS_AUTHENTICATED_ANONYMOUSLY and AuthenticatedVoter::IS_ANONYMOUS, use AuthenticatedVoter::IS_AUTHENTICATED_FULLY or AuthenticatedVoter::IS_AUTHENTICATED instead.
  • Deprecate AuthenticationTrustResolverInterface::isAnonymous() and the is_anonymous() expression function as anonymous no longer exists in version 6, use the isFullFledged() or the new isAuthenticated() instead if you want to check if the request is (fully) authenticated.
  • Deprecate the $authenticationManager argument of the AuthorizationChecker constructor
  • Deprecate setting the $alwaysAuthenticate argument to true and not setting the $exceptionOnNoToken argument to false of AuthorizationChecker
  • Deprecate methods TokenInterface::isAuthenticated() and setAuthenticated, return null from "getUser()" instead when a token is not authenticated
  • Add AccessDecisionStrategyInterface to allow custom access decision strategies
  • Add access decision strategies AffirmativeStrategy, ConsensusStrategy, PriorityStrategy, UnanimousStrategy
  • Deprecate passing the strategy as string to AccessDecisionManager, pass an instance of AccessDecisionStrategyInterface instead
  • Flag AccessDecisionManager as @final

Component/Security/Http

  • Deprecate the $authenticationEntryPoint argument of ChannelListener, and add $httpPort and $httpsPort arguments
  • Deprecate RetryAuthenticationEntryPoint, this code is now inlined in the ChannelListener
  • Deprecate FormAuthenticationEntryPoint and BasicAuthenticationEntryPoint, in the new system the FormLoginAuthenticator and HttpBasicAuthenticator should be used instead
  • Deprecate AbstractRememberMeServices, PersistentTokenBasedRememberMeServices, RememberMeServicesInterface, TokenBasedRememberMeServices, use the remember me handler alternatives instead
  • Deprecate the $authManager argument of AccessListener
  • Deprecate not setting the $exceptionOnNoToken argument of AccessListener to false
  • Deprecate DeauthenticatedEvent, use TokenDeauthenticatedEvent instead
  • Deprecate CookieClearingLogoutHandler, SessionLogoutHandler and CsrfTokenClearingLogoutHandler. Use CookieClearingLogoutListener, SessionLogoutListener and CsrfTokenClearingLogoutListener instead
  • Deprecate PassportInterface, UserPassportInterface and PassportTrait, use Passport instead

Component/Serializer

  • Add support of PHP backed enumerations
  • Add support for serializing empty array as object
  • Return empty collections as ArrayObject from Serializer::normalize() when PRESERVE_EMPTY_OBJECTS is set
  • Add support for collecting type errors during denormalization
  • Add missing arguments in MissingConstructorArgumentsException

Component/String

  • Add trimSuffix() and trimPrefix() methods

Component/Translation/Bridge/Crowdin

  • The bridge is not experimental anymore

Component/Translation/Bridge/Loco

  • The bridge is not experimental anymore

Component/Translation/Bridge/Lokalise

  • The bridge is not experimental anymore

Component/Translation

  • Add github format & autodetection to render errors as annotations when running the XLIFF linter command in a Github Actions environment.
  • Translation providers are not experimental anymore

Component/Uid

  • Add NilUlid

Component/Validator

  • Add a Cidr constraint to validate CIDR notations
  • Add a CssColor constraint to validate CSS colors
  • Add support for ConstraintViolationList::createFromMessage()
  • Add error's uid to Count and Length constraints with "exactly" option enabled

Component/VarDumper

  • Add ability to style integer and double values independently
  • Add casters for Symfony's UUIDs and ULIDs
  • Add support for Fiber

Component/Workflow

  • Add support for getting updated context after a transition

Component/Yaml

  • Add new lint:yaml dirname --exclude=/dirname/foo.yaml --exclude=/dirname/bar.yaml option to exclude one or more specific files from multiple file list
  • Allow negatable for the parse tags option with --no-parse-tags

Bridge/Doctrine

  • Remove DoctrineTestHelper and TestRepositoryFactory

Bridge/Monolog

  • The $actionLevel constructor argument of NotFoundActivationStrategy has been replaced by the $inner one which expects an ActivationStrategyInterface to decorate instead
  • The $actionLevel constructor argument of HttpCodeActivationStrategy has been replaced by the $inner one which expects an ActivationStrategyInterface to decorate instead
  • Remove ResetLoggersWorkerSubscriber in favor of "reset_on_message" option in messenger configuration
  • Remove SwiftMailerHandler, use MailerHandler instead

Bridge/PhpUnit

  • Remove SetUpTearDownTrait

Bundle/FrameworkBundle

  • Remove the session.storage alias and session.storage.* services, use the session.storage.factory alias and session.storage.factory.* services instead
  • Remove framework.session.storage_id configuration option, use the framework.session.storage_factory_id configuration option instead
  • Remove the session service and the SessionInterface alias, use the \Symfony\Component\HttpFoundation\Request::getSession() or the new \Symfony\Component\HttpFoundation\RequestStack::getSession() methods instead
  • Remove the session.attribute_bag service and session.flash_bag service
  • Remove the lock.RESOURCE_NAME and lock.RESOURCE_NAME.store services and the lock, LockInterface, lock.store and PersistingStoreInterface aliases, use lock.RESOURCE_NAME.factory, lock.factory or LockFactory instead
  • The form.factory, form.type.file, translator, security.csrf.token_manager, serializer, cache_clearer, filesystem and validator services are now private
  • Remove the output-format and xliff-version options from TranslationUpdateCommand
  • Remove has(), get(), getDoctrine()n and dispatchMessage() from AbstractController, use method/constructor injection instead
  • Make the "framework.router.utf8" configuration option default to true
  • Remove the AdapterInterface autowiring alias, use CacheItemPoolInterface instead
  • Make the profiler service private
  • Remove all other values than "none", "php_array" and "file" for framework.annotation.cache
  • Register workflow services as private
  • Remove support for passing a RouteCollectionBuilder to MicroKernelTrait::configureRoutes(), type-hint RoutingConfigurator instead
  • Remove the cache.adapter.doctrine service
  • Remove the framework.translator.enabled_locales config option, use framework.enabled_locales instead
  • Make the framework.messenger.reset_on_message configuration option default to true
  • Added helper commands (server:start, server:stop and server:status) to control the built-in web server in the background
  • Added Controller::isCsrfTokenValid helper
  • Added configuration for the PropertyAccess component
  • Added Controller::redirectToRoute helper
  • Added Controller::addFlash helper
  • Added Controller::isGranted helper
  • Added Controller::denyAccessUnlessGranted helper
  • Deprecated app.security in twig as app.user and is_granted() are already available

Bundle/SecurityBundle

  • The security.authorization_checker and security.token_storage services are now private
  • Remove UserPasswordEncoderCommand class and the corresponding user:encode-password command, use UserPasswordHashCommand and user:hash-password instead
  • Remove the security.encoder_factory.generic service, the security.encoder_factory and Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface aliases, use security.password_hasher_factory and Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface instead
  • Remove the security.user_password_encoder.generic service, the security.password_encoder and the Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface aliases, use security.user_password_hasher, security.password_hasher and Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface instead
  • Remove the logout.success_handler and logout.handlers config options, register a listener on the LogoutEvent event instead
  • Remove FirewallConfig::getListeners(), use FirewallConfig::getAuthenticators() instead
  • Added the possibility to override the default success/failure handler to get the provider key and the options injected
  • Deprecated the security.context service for the security.token_storage and security.authorization_checker services.

Bundle/TwigBundle

  • The twig service is now private
  • [BC BREAK] changed exception.json.twig to match same structure as error.json.twig making clients independent of runtime environment.

Component/Asset

  • Remove RemoteJsonManifestVersionStrategy, use JsonManifestVersionStrategy instead

Component/Cache

  • Remove DoctrineProvider and DoctrineAdapter
  • Remove support of Doctrine DBAL in PdoAdapter

Component/Config

  • Remove BaseNode::getDeprecationMessage()

Component/Console

  • Command::setHidden() has a default value (true) for $hidden parameter and is final
  • Remove Helper::strlen(), use Helper::width() instead
  • Remove Helper::strlenWithoutDecoration(), use Helper::removeDecoration() instead
  • AddConsoleCommandPass can not be configured anymore
  • Remove HelperSet::setCommand() and getCommand() without replacement
  • added a Process helper
  • added a DebugFormatter helper

Component/DependencyInjection

  • Remove Definition::setPrivate() and Alias::setPrivate(), use setPublic() instead
  • Remove inline() in favor of inline_service() and ref() in favor of service() when using the PHP-DSL
  • Remove Definition::getDeprecationMessage(), use Definition::getDeprecation() instead
  • Remove Alias::getDeprecationMessage(), use Alias::getDeprecation() instead
  • Remove the Psr\Container\ContainerInterface and Symfony\Component\DependencyInjection\ContainerInterface aliases of the service_container service
  • added new factory syntax and deprecated the old one

Component/DomCrawler

  • Remove Crawler::parents() method, use ancestors() instead

Component/EventDispatcher

  • Remove LegacyEventDispatcherProxy

Component/ExpressionLanguage

  • Added ExpressionFunction and ExpressionFunctionProviderInterface

Component/Filesystem

  • added LockHandler

Component/Finder

  • Remove Comparator::setTarget() and Comparator::setOperator()

Component/Form

  • Remove PropertyPathMaper
  • Remove Symfony\Component\Form\Extension\Validator\Util\ServerParams
  • Remove FormPass configuration
  • Remove the NumberToLocalizedStringTransformer::ROUND_* constants, use \NumberFormatter::ROUND_* instead
  • The rounding_mode option of the PercentType defaults to \NumberFormatter::ROUND_HALFUP
  • The rounding mode argument of the constructor of PercentToLocalizedStringTransformer defaults to \NumberFormatter::ROUND_HALFUP
  • Add FormConfigInterface::getIsEmptyCallback() and FormConfigBuilderInterface::setIsEmptyCallback()
  • Change $forms parameter type of the DataMapper::mapDataToForms() method from iterable to \Traversable
  • Change $forms parameter type of the DataMapper::mapFormsToData() method from iterable to \Traversable
  • Change $checkboxes parameter type of the CheckboxListMapper::mapDataToForms() method from iterable to \Traversable
  • Change $checkboxes parameter type of the CheckboxListMapper::mapFormsToData() method from iterable to \Traversable
  • Change $radios parameter type of the RadioListMapper::mapDataToForms() method from iterable to \Traversable
  • Change $radios parameter type of the RadioListMapper::mapFormsToData() method from iterable to \Traversable
  • added "html5" option to Date, Time and DateTimeFormType to be able to enable/disable HTML5 input date when widget option is "single_text"
  • added "label_format" option with possible placeholders "%name%" and "%id%"
  • [BC BREAK] drop support for model_timezone and view_timezone options in TimeType, DateType and BirthdayType, update to 2.6.2 to get back support for these options

Component/HttpFoundation

  • Remove the NamespacedAttributeBag class
  • Removed Response::create(), JsonResponse::create(), RedirectResponse::create(), StreamedResponse::create() and BinaryFileResponse::create() methods (use __construct() instead)
  • Not passing a Closure together with FILTER_CALLBACK to ParameterBag::filter() throws an \InvalidArgumentException; wrap your filter in a closure instead
  • Not passing a Closure together with FILTER_CALLBACK to InputBag::filter() throws an \InvalidArgumentException; wrap your filter in a closure instead
  • Removed the Request::HEADER_X_FORWARDED_ALL constant, use either Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO or Request::HEADER_X_FORWARDED_AWS_ELB or Request::HEADER_X_FORWARDED_TRAEFIKconstants instead
  • Rename RequestStack::getMasterRequest() to getMainRequest()
  • Not passing FILTER_REQUIRE_ARRAY or FILTER_FORCE_ARRAY flags to InputBag::filter() when filtering an array will throw BadRequestException
  • Removed the Request::HEADER_X_FORWARDED_ALL constant
  • Retrieving non-scalar values using InputBag::get() will throw BadRequestException (use InputBad::all() instead to retrieve an array)
  • Passing non-scalar default value as the second argument InputBag::get() will throw \InvalidArgumentException
  • Passing non-scalar, non-array value as the second argument InputBag::set() will throw \InvalidArgumentException
  • Passing null as $requestIp to IpUtils::__checkIp(), IpUtils::__checkIp4() or IpUtils::__checkIp6() is not supported anymore.
  • PdoSessionHandler changes
    • implemented different session locking strategies to prevent loss of data by concurrent access to the same session
    • [BC BREAK] save session data in a binary column without base64_encode
    • [BC BREAK] added lifetime column to the session table which allows to have different lifetimes for each session
    • implemented lazy connections that are only opened when a session is used by either passing a dsn string explicitly or falling back to session.save_path ini setting
    • added a createTable method that initializes a correctly defined table depending on the database vendor

Component/HttpKernel

  • Remove ArgumentInterface
  • Remove ArgumentMetadata::getAttribute(), use getAttributes() instead
  • Remove support for returning a ContainerBuilder from KernelInterface::registerContainerConfiguration()
  • Remove KernelEvent::isMasterRequest(), use isMainRequest() instead
  • Remove support for service:action syntax to reference controllers, use serviceOrFqcn::method instead
  • deprecated Symfony\Component\HttpKernel\EventListener\ErrorsLoggerListener, use Symfony\Component\HttpKernel\EventListener\DebugHandlersListener instead
  • deprecated unused method Symfony\Component\HttpKernel\Kernel::isClassInActiveBundle and Symfony\Component\HttpKernel\KernelInterface::isClassInActiveBundle

Component/Intl

  • Remove DateFormatter\*, Collator, NumberFormatter, Locale, IntlGlobals, MethodArgumentNotImplementedException, MethodArgumentValueNotImplementedException, MethodNotImplementedExceptionand NotImplementedException classes, use symfony/polyfill-intl-icu ^1.21 instead

Component/Ldap

  • Removed LdapUser::getUsername() method, use getUserIdentifier() instead
  • Removed LdapUserProvider::loadUserByUsername() method, use loadUserByIdentifier() instead

Component/Lock

  • Remove the NotSupportedException. It shouldn't be thrown anymore
  • Remove the RetryTillSaveStore. Logic has been moved in Lock and is not needed anymore
  • Remove support of Doctrine DBAL in PdoStore and PostgreSqlStore

Component/Mailer/Bridge/Amazon

  • Remove the SesApiTransport class, use SesApiAsyncAwsTransport instead
  • Remove the SesHttpTransport class, use SesHttpAsyncAwsTransport instead

Component/Mailer

  • The HttpTransportException class takes a string at first argument

Component/Messenger/Bridge/Amqp

  • Remove option prefetch_count
  • Using invalid options will throw a LogicException

Component/Messenger/Bridge/Redis

  • Remove option tls
  • Using invalid options will throw a LogicException
  • The delete_after_ack config option now defaults to true

Component/Messenger

  • Remove deprecated classes Symfony/Component/Messenger/Transport/AmqpExt, Symfony/Component/Messenger/Transport/Doctrine and Symfony/Component/Messenger/Transport/Redis.
  • Class MessengerPass cannot be configured with constructor arguments
  • Remove constructor arguments and getters for RedeliveryStamp's properties exceptionMessage and flattenException

Component/Mime

  • Remove Address::fromString(), use Address::create() instead
  • Remove Serializable interface from RawMessage

Component/Notifier/Bridge/Slack

  • Remove SlackOptions::channel(), use SlackOptions::recipient() instead

Component/OptionsResolver

  • Remove OptionsResolverIntrospector::getDeprecationMessage()
  • deprecated OptionsResolverInterface
  • [BC BREAK] removed "array" type hint from OptionsResolverInterface methods setRequired(), setAllowedValues(), addAllowedValues(), setAllowedTypes() and addAllowedTypes()
  • added OptionsResolver::setDefault()
  • added OptionsResolver::hasDefault()
  • added OptionsResolver::setNormalizer()
  • added OptionsResolver::isRequired()
  • added OptionsResolver::getRequiredOptions()
  • added OptionsResolver::isMissing()
  • added OptionsResolver::getMissingOptions()
  • added OptionsResolver::setDefined()
  • added OptionsResolver::isDefined()
  • added OptionsResolver::getDefinedOptions()
  • added OptionsResolver::remove()
  • added OptionsResolver::clear()
  • deprecated OptionsResolver::replaceDefaults()
  • deprecated OptionsResolver::setOptional() in favor of setDefined()
  • deprecated OptionsResolver::isKnown() in favor of isDefined()
  • [BC BREAK] OptionsResolver::isRequired() returns true now if a required option has a default value set
  • [BC BREAK] merged Options into OptionsResolver and turned Options into an interface
  • deprecated Options::overload() (now in OptionsResolver)
  • deprecated Options::set() (now in OptionsResolver)
  • deprecated Options::get() (now in OptionsResolver)
  • deprecated Options::has() (now in OptionsResolver)
  • deprecated Options::replace() (now in OptionsResolver)
  • [BC BREAK] Options::get() (now in OptionsResolver) can only be used within lazy option/normalizer closures now
  • [BC BREAK] removed Traversable interface from Options since using within lazy option/normalizer closures resulted in exceptions
  • [BC BREAK] removed Options::all() since using within lazy option/normalizer closures resulted in exceptions
  • [BC BREAK] OptionDefinitionException now extends LogicException instead of RuntimeException
  • [BC BREAK] normalizers are not executed anymore for unset options
  • normalizers are executed after validating the options now
  • [BC BREAK] an UndefinedOptionsException is now thrown instead of an InvalidOptionsException when non-existing options are passed

Component/PropertyAccess

  • make PropertyAccessor::__construct() accept a combination of bitwise flags as first and second arguments

Component/PropertyInfo

  • Remove the Type::getCollectionKeyType() and Type::getCollectionValueType() methods, use Type::getCollectionKeyTypes() and Type::getCollectionValueTypes() instead
  • Remove the enable_magic_call_extraction context option in ReflectionExtractor::getWriteInfo() and ReflectionExtractor::getReadInfo() in favor of enable_magic_methods_extraction

Component/Security

  • added Symfony\Component\Security\Http\Authentication\AuthenticationUtils
  • Deprecated the SecurityContext class in favor of the AuthorizationChecker and TokenStorage classes

Component/Security/Core

  • TokenInterface does not extend Serializable anymore
  • Remove all classes in the Core\Encoder\ sub-namespace, use the PasswordHasher component instead
  • Remove methods getPassword() and getSalt() from UserInterface, use PasswordAuthenticatedUserInterface or LegacyPasswordAuthenticatedUserInterface instead
  • AccessDecisionManager requires the strategy to be passed as in instance of AccessDecisionStrategyInterface

Component/Security/Csrf

  • Remove the SessionInterface $session constructor argument of SessionTokenStorage, inject a \Symfony\Component\HttpFoundation\RequestStack $requestStack instead
  • Using SessionTokenStorage outside a request context throws a SessionNotFoundException

Component/Security/Http

  • Remove LogoutSuccessHandlerInterface and LogoutHandlerInterface, register a listener on the LogoutEvent event instead
  • Remove CookieClearingLogoutHandler, SessionLogoutHandler and CsrfTokenClearingLogoutHandler. Use CookieClearingLogoutListener, SessionLogoutListener and CsrfTokenClearingLogoutListener instead

Component/Serializer

  • Remove ArrayDenormalizer::setSerializer(), call setDenormalizer() instead
  • Remove the ability to create instances of the annotation classes by passing an array of parameters, use named arguments instead
  • added a new serializer: PropertyNormalizer. Like GetSetMethodNormalizer, this normalizer will map an object's properties to an array.
  • added circular references handling for GetSetMethodNormalizer

Component/Translation

  • added possibility to cache catalogues
  • added TranslatorBagInterface
  • added LoggingTranslator
  • added Translator::getMessages() for retrieving the message catalogue as an array

Component/Validator

  • Remove the allowEmptyString option from the Length constraint
  • Remove the NumberConstraintTrait trait
  • ValidatorBuilder::enableAnnotationMapping() does not accept a Doctrine annotation reader anymore
  • ValidatorBuilder::enableAnnotationMapping() won't automatically setup a Doctrine annotation reader anymore
  • [BC BREAK] FileValidator disallow empty files
  • [BC BREAK] UserPasswordValidator source message change
  • [BC BREAK] added internal ExecutionContextInterface::setConstraint()
  • added ConstraintViolation::getConstraint()
  • [BC BREAK] The ExpressionValidator will now evaluate the Expression even when the property value is null or an empty string
  • deprecated ClassMetadata::hasMemberMetadatas()
  • deprecated ClassMetadata::getMemberMetadatas()
  • deprecated ClassMetadata::addMemberMetadata()
  • [BC BREAK] added Mapping\MetadataInterface::getConstraints()
  • added generic "payload" option to all constraints for attaching domain-specific data
  • [BC BREAK] added ConstraintViolationBuilderInterface::setCause()

Component/Workflow

  • Remove InvalidTokenConfigurationException

Bridge/Monolog

  • Add support for Monolog 3

Bridge/PhpUnit

  • Add option ignoreFile to configure a file that lists deprecation messages to ignore

Bridge/Twig

  • Wrap help messages on form elements in div instead of p

Bundle/FrameworkBundle

  • Add support for configuring semaphores
  • Environment variable SYMFONY_IDE is read by default when framework.ide config is not set
  • Load PHP configuration files by default in the MicroKernelTrait
  • Add cache:pool:invalidate-tags command
  • Add xliff support in addition to xlf for XliffFileDumper
  • Deprecate the reset_on_message config option. It can be set to true only and does nothing now
  • Add trust_x_sendfile_type_header option
  • Add support for first-class callable route controller in MicroKernelTrait
  • Add tag routing.condition_service to autoconfigure routing condition services
  • Automatically register kernel methods marked with the Symfony\Component\Routing\Annotation\Route attribute or annotation as controllers in MicroKernelTrait
  • Deprecate not setting the http_method_override config option. The default value will change to false in 7.0.
  • Add framework.profiler.collect_serializer_data config option, set it to true to enable the serializer data collector and profiler panel

Bundle/SecurityBundle

  • The security.access_control now accepts a RequestMatcherInterface under the request_matcher option as scope configuration
  • Display the inherited roles of the logged-in user in the Web Debug Toolbar

Bundle/TwigBundle

  • Add option twig.file_name_pattern to restrict which files are compiled by cache warmer and linter
  • Deprecate option twig.autoescape, use twig.autoescape_service[_method] instead

Bundle/WebProfilerBundle

  • Add a download link in mailer profiler for email attachments

Component/Asset

  • UrlPackage accepts empty strings as base_url, in order to simplify local dev configuration

Component/BrowserKit

  • Add toArray method to Response

Component/Cache

  • Add support for ACL auth in RedisAdapter
  • Improve reliability and performance of TagAwareAdapter by making tag versions an integral part of item value

Component/Config

  • Allow using environment variables in EnumNode
  • Add Node's information in generated Config
  • Add DefinitionFileLoader class to load a TreeBuilder definition from an external file
  • Add DefinitionConfigurator helper

Component/Console

  • Add support to display table vertically when calling setVertical()
  • Add method __toString() to InputInterface
  • Deprecate Command::$defaultName and Command::$defaultDescription, use the AsCommand attribute instead
  • Add suggested values for arguments and options in input definition, for input completion

Component/DependencyInjection

  • Add #[MapDecorated] attribute telling to which parameter the decorated service should be mapped in a decorator
  • Add #[AsDecorator] attribute to make a service decorates another
  • Add $exclude to TaggedIterator and TaggedLocator attributes
  • Add $exclude to tagged_iterator and tagged_locator configurator
  • Add an env function to the expression language provider
  • Add an Autowire attribute to tell a parameter how to be autowired
  • Allow using expressions as service factories
  • Add argument type closure to help passing closures to services
  • Deprecate ReferenceSetArgumentTrait
  • Add AbstractExtension class for DI configuration/definition on a single file

Component/ErrorHandler

  • Report overridden @final constants and properties
  • Read environment variable SYMFONY_IDE to configure file link format

Component/ExpressionLanguage

  • Add support for null-safe syntax when parsing object's methods and properties
  • Add new operators: contains, starts with and ends with
  • Support lexing numbers with the numeric literal separator _
  • Support lexing decimals with no leading zero

Component/Form

  • Add a prototype_options option to CollectionType

Component/HtmlSanitizer

  • Add the component as experimental

Component/HttpClient

  • Allow yielding Exception from MockResponse's $body to mock transport errors
  • Remove credentials from requests redirected to same host but different port

Component/HttpFoundation

  • Add stale while revalidate and stale if error cache header
  • Allow dynamic session "ttl" when using a remote storage

Component/HttpKernel

  • Add BackedEnumValueResolver to resolve backed enum cases from request attributes in controller arguments
  • Add DateTimeValueResolver to resolve request attributes into DateTime objects in controller arguments
  • Deprecate StreamedResponseListener, it's not needed anymore
  • Add Profiler::isEnabled() so collaborating collector services may elect to omit themselves
  • Add the UidValueResolver argument value resolver
  • Add AbstractBundle class for DI configuration/definition on a single file
  • Update the path of a bundle placed in the src/ directory to the parent directory when AbstractBundle is used

Component/Ldap

  • Return a 500 Internal Server Error if LDAP server in unavailable during user enumeration / authentication
  • Introduce InvalidSearchCredentialsException to differentiate between cases where user-provided credentials are invalid and cases where the configured search credentials are invalid

Component/Mailer/Bridge/Amazon

  • Add support for X-SES-MESSAGE-TAGS

Component/Mailer/Bridge/Mailgun

  • Allow multiple TagHeaders with MailgunApiTransport

Component/Mailer

  • Make start() and stop() methods public on SmtpTransport
  • Improve extensibility of EsmtpTransport

Component/Messenger/Bridge/AmazonSqs

  • Added session_token option to support short-lived AWS credentials

Component/Messenger/Bridge/Redis

  • Add support for Redis Sentinel

Component/Messenger

  • Add SerializedMessageStamp to avoid serializing a message when a retry occurs
  • Automatically resolve handled message type when method different from __invoke is used as handler
  • Allow #[AsMessageHandler] attribute on methods

Component/Mime

  • Add DataPart::getFilename() and DataPart::getContentType()

Component/Notifier/Bridge/Engagespot

  • Add the bridge

Component/Notifier/Bridge/FortySixElks

  • Add the bridge

Component/Notifier/Bridge/KazInfoTeh

  • Add the bridge

Component/Notifier/Bridge/OrangeSms

  • Add the bridge

Component/Notifier/Bridge/OvhCloud

  • Add no_stop_clause option to the DSN that allows removing "STOP clause" at the end of the message for non-commercial use

Component/Notifier/Bridge/Sendberry

  • Add the bridge

Component/Notifier/Bridge/Smsapi

  • Add fast option to the DSN that allows sending message with the highest priority that ensures the quickest possible time of delivery
  • Add test option to the DSN that allows sending message in test mode (message is validated, but not sent)

Component/Notifier

  • Use importance level to set flash message type

Component/PropertyInfo

  • Add support for phpDocumentor and PHPStan pseudo-types
  • Add PHP 8.0 promoted properties @param mutation support to PhpDocExtractor
  • Add PHP 8.0 promoted properties @param mutation support to PhpStanExtractor

Component/Routing

  • Add getMissingParameters and getRouteName methods on MissingMandatoryParametersException
  • Allow using UTF-8 parameter names
  • Support the attribute type (alias of annotation) in annotation loaders
  • Already encoded slashes are not decoded nor double-encoded anymore when generating URLs (query parameters)
  • Add EnumRequirement to help generate route requirements from a \BackedEnum
  • Add Requirement, a collection of universal regular-expression constants to use as route parameter requirements
  • Add params variable to condition expression
  • Deprecate not passing route parameters as the fourth argument to UrlMatcher::handleRouteRequirements()

Component/Serializer

  • Add TraceableSerializer, TraceableNormalizer, TraceableEncoder and SerializerDataCollector to integrate with the web profiler
  • Add the ability to create contexts using context builders
  • Set Context annotation as not final
  • Deprecate ContextAwareNormalizerInterface, use NormalizerInterface instead
  • Deprecate ContextAwareDenormalizerInterface, use DenormalizerInterface instead
  • Deprecate supporting denormalization for AbstractUid in UidNormalizer, use one of AbstractUid child class instead
  • Deprecate denormalizing to an abstract class in UidNormalizer
  • Add support for can*() methods to ObjectNormalizer

Component/Translation/Bridge/Loco

  • Include header If-Modified-Since as catalog metadata to support verifying whether a translation value was changed
  • Add $translatorBag constructor argument of TranslatorBagInterface to LocoProviderFactory and LocoProvider

Component/Translation

  • Parameters implementing TranslatableInterface are processed
  • Add the file extension to the XliffFileDumper constructor

Component/Validator

  • Add the fields option to the Unique constraint, to define which collection keys should be checked for uniqueness
  • Deprecate Constraint::$errorNames, use Constraint::ERROR_NAMES instead
  • Deprecate constraint ExpressionLanguageSyntax, use ExpressionSyntax instead
  • Add method __toString() to ConstraintViolationInterface & ConstraintViolationListInterface
  • Allow creating constraints with required arguments

Component/Yaml

  • In cases where it will likely improve readability, strings containing single quotes will be double-quoted

Bridge/Doctrine

  • Add #[MapEntity] with its corresponding EntityValueResolver
  • Add NAME constant to UlidType and UuidType

Bridge/PhpUnit

  • Add support for mocking the hrtime() function

Bridge/Twig

  • Add form_label_content and form_help_content block to form themes
  • Add #[Template()] to describe how to render arrays returned by controllers
  • Add support for toggle buttons in Bootstrap 5 form theme
  • Add app.current_route and app.current_route_parameters variables

Bundle/FrameworkBundle

  • Add resolve-env option to debug:config command to display actual values of environment variables in dumped configuration
  • Add NotificationAssertionsTrait
  • Add option framework.handle_all_throwables to allow Symfony\Component\HttpKernel\HttpKernel to handle all kinds of Throwable
  • Make AbstractController::render() able to deal with forms and deprecate renderForm()
  • Deprecate the Symfony\Component\Serializer\Normalizer\ObjectNormalizer and Symfony\Component\Serializer\Normalizer\PropertyNormalizer autowiring aliases, type-hint against Symfony\Component\Serializer\Normalizer\NormalizerInterface or implement NormalizerAwareInterface instead
  • Add service usages list to the debug:container command output
  • Add service and alias deprecation message to debug:container [<name>] output
  • Tag all workflows services with workflow, those with type=workflow are tagged with workflow.workflow, and those with type=state_machine with workflow.state_machine
  • Add rate_limiter configuration option to messenger.transport to allow rate limited transports using the RateLimiter component
  • Remove @internal tag from secret vaults to allow them to be used directly outside the framework bundle and custom vaults to be added
  • Deprecate framework.form.legacy_error_messages config node
  • Add a framework.router.cache_dir configuration option to configure the default Router cache_dir option
  • Add option framework.messenger.buses.*.default_middleware.allow_no_senders to enable throwing when a message doesn't have a sender
  • Deprecate AbstractController::renderForm(), use render() instead
  • Deprecate FrameworkExtension::registerRateLimiter()

Bundle/SecurityBundle

  • Add the Security helper class
  • Deprecate the Symfony\Component\Security\Core\Security service alias, use Symfony\Bundle\SecurityBundle\Security instead
  • Add Security::getFirewallConfig() to help to get the firewall configuration associated to the Request
  • Add Security::login() to login programmatically
  • Add Security::logout() to logout programmatically
  • Add security.firewalls.logout.enable_csrf to enable CSRF protection using the default CSRF token generator
  • Add RFC6750 Access Token support to allow token-based authentication
  • Add security.firewalls.switch_user.target_route option to configure redirect target route on switch user
  • Deprecate the security.enable_authenticator_manager config option

Bundle/TwigBundle

  • Add the twig.mailer.html_to_text_converter option to allow configuring custom HtmlToTextConverterInterface implementations to be used by the twig.mime_body_renderer service

Component/Clock

  • Add the component

Component/Config

  • Deprecate calling NodeBuilder::setParent() without any arguments
  • Add a more accurate typehint in generated PHP config

Component/Console

  • Improve truecolor terminal detection in some cases
  • Add support for 256 color terminals (conversion from Ansi24 to Ansi8 if terminal is capable of it)
  • Deprecate calling *Command::setApplication(), *FormatterStyle::setForeground/setBackground(), Helper::setHelpSet(), Input*::setDefault(), Question::setAutocompleterCallback/setValidator()without any arguments
  • Change the signature of OutputFormatterStyleInterface::setForeground/setBackground() to setForeground/setBackground(?string)
  • Change the signature of HelperInterface::setHelperSet() to setHelperSet(?HelperSet)

Component/DependencyInjection

  • Use lazy-loading ghost objects and virtual proxies out of the box
  • Add arguments &$asGhostObject and $id to LazyProxy's DumperInterface to allow using ghost objects for lazy loading services
  • Add enum env var processor
  • Add shuffle env var processor
  • Allow #[When] to be extended
  • Change the signature of ContainerAwareInterface::setContainer() to setContainer(?ContainerInterface)
  • Deprecate calling ContainerAwareTrait::setContainer() without arguments
  • Deprecate using numeric parameter names
  • Add support for tagged iterators/locators exclude option to the xml and yaml loaders/dumpers
  • Allow injecting string $env into php config closures

Component/Dotenv

  • Add a new filter argument to debug:dotenv command to filter variable names

Component/ExpressionLanguage

  • Add support for null-coalescing syntax

Component/Finder

  • Add Finder::sortByExtension() and Finder::sortBySize()
  • Add Finder::sortByCaseInsensitiveName() to sort by name with case insensitive sorting methods

Component/Form

  • Allow passing TranslatableInterface objects to the ChoiceView label
  • Allow passing TranslatableInterface objects to the help option
  • Deprecate calling Button/Form::setParent(), ButtonBuilder/FormConfigBuilder::setDataMapper(), TransformationFailedException::setInvalidMessage() without arguments
  • Change the signature of FormConfigBuilderInterface::setDataMapper() to setDataMapper(?DataMapperInterface)
  • Change the signature of FormInterface::setParent() to setParent(?self)
  • Add PasswordHasherExtension with support for hash_property_path option in PasswordType
  • Added back the model_timezone and view_timezone options for TimeType, DateType and BirthdayType

Component/HttpClient

  • Make HttplugClient implement Psr\Http\Message\RequestFactoryInterface, StreamFactoryInterface and UriFactoryInterface
  • Deprecate implementing Http\Message\RequestFactory, StreamFactory and UriFactory on HttplugClient
  • Add withOptions() to HttplugClient and Psr18Client

Component/HttpFoundation

  • The HTTP cache store uses the xxh128 algorithm
  • Deprecate calling JsonResponse::setCallback(), Response::setExpires/setLastModified/setEtag(), MockArraySessionStorage/NativeSessionStorage::setMetadataBag(), NativeSessionStorage::setSaveHandler() without arguments
  • Add request matchers under the Symfony\Component\HttpFoundation\RequestMatcher namespace
  • Deprecate RequestMatcher in favor of ChainRequestMatcher
  • Deprecate Symfony\Component\HttpFoundation\ExpressionRequestMatcher in favor of Symfony\Component\HttpFoundation\RequestMatcher\ExpressionRequestMatcher

Component/HttpKernel

  • Add constructor argument bool $handleAllThrowable to HttpKernel
  • Add ControllerEvent::getAttributes() to handle attributes on controllers
  • Add #[Cache] to describe the default HTTP cache headers on controllers
  • Add absolute_uri option to surrogate fragment renderers
  • Add ValueResolverInterface and deprecate ArgumentValueResolverInterface
  • Add argument $reflector to ArgumentResolverInterface and ArgumentMetadataFactoryInterface
  • Deprecate calling ConfigDataCollector::setKernel(), RouterListener::setCurrentRequest() without arguments

Component/Intl

  • Add EmojiTransliterator to translate emoji to many locales

Component/Ldap

  • Deprecate {username} parameter use in favour of {user_identifier}

Component/Mailer/Bridge/Infobip

  • Add the bridge

Component/Mailer/Bridge/MailPace

  • Add the bridge

Component/Mailer/Bridge/OhMySmtp

  • Deprecate the bridge in favor of the MailPace bridge

Component/Mailer

  • Add a mailer:test command
  • Add SentMessageEvent and FailedMessageEvent events

Component/Messenger

  • Add new messenger:stats command that returns a list of transports with their "to be processed" message count
  • Add TransportNamesStamp to change the transport while dispatching a message
  • Add support for rate limited transports by using the RateLimiter component.
  • Deprecate MessageHandlerInterface and MessageSubscriberInterface, use #[AsMessageHandler] instead
  • Add new parameter allowNoSenders to SendMessageMiddleware to enable throwing when a message doesn't have a sender

Component/Mime

  • Add File
  • Deprecate Email::attachPart(), use addPart() instead
  • Deprecate calling Message::setBody() without arguments

Component/Notifier/Bridge/AllMySms

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/AmazonSns

  • Throw exception when SmsMessage->from defined

Component/Notifier/Bridge/Chatwork

  • Add the bridge

Component/Notifier/Bridge/Clickatell

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Discord

  • Check embed limitations

Component/Notifier/Bridge/Esendex

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/FakeSms

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/FortySixElks

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/FreeMobile

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/GatewayApi

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Infobip

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Iqsms

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/KazInfoTeh

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/LightSms

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Mailjet

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/MessageBird

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/MessageMedia

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Mobyt

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Octopush

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/OrangeSms

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/OvhCloud

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/RocketChat

  • Add the ability to send multiple attachments in a message
  • Add the ability to send custom payload data to Rocket.Chat webhooks

Component/Notifier/Bridge/Sendberry

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Sendinblue

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Sinch

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Sms77

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Smsapi

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/SmsBiuras

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Smsc

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/SmsFactor

  • Add the bridge
  • Use SmsMessage->from when defined

Component/Notifier/Bridge/SpotHit

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Telnyx

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/TurboSms

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Twilio

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Vonage

  • Use SmsMessage->from when defined

Component/Notifier/Bridge/Yunpian

  • Throw exception when SmsMessage->from defined

Component/Notifier/Bridge/Zendesk

  • Add the bridge

Component/Notifier

  • Add PHPUnit constraints
  • Add from property in SmsMessage

Component/PasswordHasher

  • Use SensitiveParameter attribute to redact sensitive values in back traces

Component/PropertyAccess

  • Deprecate calling PropertyAccessorBuilder::setCacheItemPool() without arguments
  • Added method isNullSafe() to PropertyPathInterface, implementing the interface without implementing this method is deprecated
  • Add support for the null-coalesce operator in property paths

Component/RateLimiter

  • Move symfony/lock to dev dependency in composer.json

Component/Routing

  • Add Requirement::POSITIVE_INT for common ids and pagination

Component/Security/Core

  • Deprecate the Security class, use Symfony\Bundle\SecurityBundle\Security instead
  • Change the signature of TokenStorageInterface::setToken() to setToken(?TokenInterface $token)
  • Deprecate calling TokenStorage::setToken() without arguments
  • Add a ChainUserChecker to allow calling multiple user checkers for a firewall

Component/Security/Http

  • Add maximum username length enforcement of 4096 characters in UserBadge
  • Add #[IsGranted()]
  • Deprecate empty username or password when using when using JsonLoginAuthenticator
  • Set custom lifetime for login link
  • Add $lifetime parameter to LoginLinkHandlerInterface::createLoginLink()
  • Add RFC6750 Access Token support to allow token-based authentication
  • Allow using expressions as #[IsGranted()] attribute and subject

Component/Serializer

  • Add support for constructor promoted properties to Context attribute
  • Add context option PropertyNormalizer::NORMALIZE_VISIBILITY with bitmask flags PropertyNormalizer::NORMALIZE_PUBLIC, PropertyNormalizer::NORMALIZE_PROTECTED, PropertyNormalizer::NORMALIZE_PRIVATE
  • Add method withNormalizeVisibility to PropertyNormalizerContextBuilder
  • Deprecate calling AttributeMetadata::setSerializedName(), ClassMetadata::setClassDiscriminatorMapping() without arguments
  • Change the signature of AttributeMetadataInterface::setSerializedName() to setSerializedName(?string)
  • Change the signature of ClassMetadataInterface::setClassDiscriminatorMapping() to setClassDiscriminatorMapping(?ClassDiscriminatorMapping)
  • Add option YamlEncoder::YAML_INDENTATION to YamlEncoder constructor options to configure additional indentation for each level of nesting. This allows configuring indentation in the service configuration.
  • Add SerializedPath annotation to flatten nested attributes

Component/String

  • Add support for emoji in AsciiSlugger

Component/Translation

  • Deprecate PhpStringTokenParser
  • Deprecate PhpExtractor in favor of PhpAstExtractor
  • Add PhpAstExtractor (requires nikic/php-parser to be installed)

Component/Uid

  • Add UuidV7 and UuidV8
  • Add TimeBasedUidInterface to describe UIDs that embed a timestamp
  • Add MaxUuid and MaxUlid

Component/Validator

  • Add option Email::VALIDATION_MODE_HTML5_ALLOW_NO_TLD with "html5-allow-no-tld" e-mail validation mode, to match with the W3C official specification
  • Add method getCause() to ConstraintViolationInterface
  • Add the When constraint and validator
  • Deprecate the "loose" e-mail validation mode, use "html5" instead
  • Add the negate option to the Expression constraint, to inverse the logic of the violation's creation
  • Add the extensions option to the File constraint as an alternative to mimeTypes which checks the mime type of the file, its extension, and the consistency between them
  • Add padding for enhanced privacy to the NotCompromisedPasswordValidator

Component/VarDumper

  • Add support for FFI\CData and FFI\CType
  • Deprecate calling VarDumper::setHandler() without arguments

Component/VarExporter

  • Add support for lazy ghost objects and virtual proxies
  • Add Hydrator::hydrate()
  • Preserve PHP references also when using Hydrator::hydrate() or Instantiator::instantiate()
  • Add support for hydrating from native (array) casts

Component/Workflow

  • Mark Symfony\Component\Workflow\Registry as internal
  • Deprecate calling Definition::setInitialPlaces() without arguments

Component/Yaml

  • Add support for !php/enum and !php/enum *->value
  • Deprecate the !php/const: tag in key which will be replaced by the !php/const tag (without the colon) since 3.4

Bridge/Doctrine

  • Deprecate passing Doctrine subscribers to ContainerAwareEventManager class, use listeners instead
  • Add AbstractSchemaListener, LockStoreSchemaListener and PdoSessionHandlerSchemaListener
  • Deprecate DoctrineDbalCacheAdapterSchemaSubscriber in favor of DoctrineDbalCacheAdapterSchemaListener
  • Deprecate MessengerTransportDoctrineSchemaSubscriber in favor of MessengerTransportDoctrineSchemaListener
  • Deprecate RememberMeTokenProviderDoctrineSchemaSubscriber in favor of RememberMeTokenProviderDoctrineSchemaListener
  • Add optional parameter $isSameDatabase to DoctrineTokenProvider::configureSchema()

Bridge/PhpUnit

  • Add support for mocking the enum_exists function
  • Enable reporting of deprecations triggered by Doctrine by default

Bridge/ProxyManager

  • Deprecate the bridge

Bridge/Twig

  • Add AppVariable::getLocale() to retrieve the current locale when using the LocaleSwitcher

Bundle/FrameworkBundle

  • Add extra option for http_client.default_options and http_client.scoped_client
  • Add DomCrawlerAssertionsTrait::assertSelectorCount(int $count, string $selector)
  • Allow to avoid limit definition in a RateLimiter configuration when using the no_limit policy
  • Add --format option to the debug:config command
  • Add support to pass namespace wildcard in framework.messenger.routing
  • Deprecate framework:exceptions tag, unwrap it and replace framework:exception tags' name attribute by class
  • Deprecate the notifier.logger_notification_listener service, use the notifier.notification_logger_listener service instead
  • Allow setting private services with the test container
  • Register alias for argument for workflow services with workflow name only
  • Configure the ErrorHandler on FrameworkBundle::boot()
  • Allow setting debug.container.dump to false to disable dumping the container to XML
  • Add framework.http_cache.skip_response_headers option
  • Display warmers duration on debug verbosity for cache:clear command
  • Add AbstractController::sendEarlyHints() to send HTTP Early Hints
  • Add autowiring aliases for Http\Client\HttpAsyncClient
  • Deprecate the Http\Client\HttpClient service, use Psr\Http\Client\ClientInterface instead
  • Add stop_worker_on_signals configuration option to messenger to define signals which would stop a worker
  • Add support for --all option to clear all cache pools with cache:pool:clear command

Bundle/SecurityBundle

  • Deprecate enabling bundle and not configuring it
  • Add _stateless attribute to the request when firewall is stateless and the attribute is not already set
  • Add StatelessAuthenticatorFactoryInterface for authenticators targeting stateless firewalls only and that don't require a user provider
  • Modify "icon.svg" to improve accessibility for blind/low vision users
  • Make Security::login() return the authenticator response
  • Deprecate the security.firewalls.logout.csrf_token_generator config option, use security.firewalls.logout.csrf_token_manager instead
  • Make firewalls event dispatcher traceable on debug mode
  • Add TokenHandlerFactoryInterface, OidcUserInfoTokenHandlerFactory, OidcTokenHandlerFactory and ServiceTokenHandlerFactory for AccessTokenFactory

Bundle/TwigBundle

  • Deprecate the Twig_Environment autowiring alias, use Twig\Environment instead

Bundle/WebProfilerBundle

  • Add a "role=img" and an explicit title in the .svg file used by the web debug toolbar to improve accessibility with screen readers for blind users
  • Add a clickable link to the entry view twig file in the toolbar

Component/AssetMapper

  • Add the component as experimental

Component/BrowserKit

  • Add AbstractBrowser::useHtml5Parser()

Component/Cache

  • Add support for Relay PHP extension for Redis
  • Updates to allow Redis cluster connections using predis/predis:^2.0
  • Add optional parameter $isSameDatabase to DoctrineDbalAdapter::configureSchema()

Component/Clock

  • Add ClockAwareTrait to help write time-sensitive classes
  • Add Clock class and now() function

Component/Config

  • Allow enum values in EnumNode

Component/Console

  • Add support for choosing exit code while handling signal, or to not exit at all
  • Add ProgressBar::setPlaceholderFormatter to set a placeholder attached to a instance, instead of being global.
  • Add ReStructuredTextDescriptor

Component/CssSelector

  • Add support for :scope

Component/DependencyInjection

  • Add options inline_factories and inline_class_loader to PhpDumper::dump()
  • Deprecate PhpDumper options inline_factories_parameter and inline_class_loader_parameter
  • Add RemoveBuildParametersPass, which removes parameters starting with a dot during compilation
  • Add support for nesting autowiring-related attributes into #[Autowire(...)]
  • Deprecate undefined and numeric keys with service_locator config
  • Fail if Target attribute does not exist during compilation
  • Enable deprecating parameters with ContainerBuilder::deprecateParameter()
  • Add #[AsAlias] attribute to tell under which alias a service should be registered or to use the implemented interface if no parameter is given
  • Allow to trim XML service parameters value by using trim="true" attribute
  • Allow extending the Autowire attribute
  • Add #[Exclude] to skip autoregistering a class
  • Add support for generating lazy closures
  • Add support for autowiring services as closures using #[AutowireCallable] or #[AutowireServiceClosure]
  • Add support for #[Autowire(lazy: true|class-string)]
  • Make it possible to cast callables into single-method interfaces
  • Deprecate #[MapDecorated], use #[AutowireDecorated] instead
  • Deprecate the @required annotation, use the Symfony\Contracts\Service\Attribute\Required attribute instead
  • Add constructor option to services declaration and to #[Autoconfigure]

Component/DomCrawler

  • Add $useHtml5Parser argument to Crawler
  • Add CrawlerSelectorCount test constraint
  • Add argument $normalizeWhitespace to Crawler::innerText()
  • Make Crawler::innerText() return the first non-empty text

Component/ErrorHandler

  • Display exception properties in the HTML error page

Component/ExpressionLanguage

  • Add enum expression function
  • Deprecate loose comparisons when using the "in" operator; normalize the array parameter so it only has the expected types or implement loose matching in your own expression function

Component/Form

  • Don't render seconds for HTML5 date pickers unless "with_seconds" is explicitly set
  • Add a placeholder_attr option to ChoiceType
  • Deprecate not configuring the "widget" option of date/time form types, it will default to "single_text" in v7

Component/HttpClient

  • Add option crypto_method to set the minimum TLS version and make it default to v1.2
  • Add UriTemplateHttpClient to use URI templates as specified in the RFC 6570
  • Add ServerSentEvent::getArrayData() to get the Server-Sent Event's data decoded as an array when it's a JSON payload
  • Allow array of urls as base_uri option value in RetryableHttpClient to retry on a new url each time
  • Add JsonMockResponse, a MockResponse shortcut that automatically encodes the passed body to JSON and sets the content type to application/json by default
  • Support file uploads by nesting resource streams in option "body"

Component/HttpFoundation

  • Calling ParameterBag::getDigit(), getAlnum(), getAlpha() on an array throws a UnexpectedValueException instead of a TypeError
  • Add ParameterBag::getString() to convert a parameter into string and throw an exception if the value is invalid
  • Add ParameterBag::getEnum()
  • Create migration for session table when pdo handler is used
  • Add support for Relay PHP extension for Redis
  • The Response::sendHeaders() method now takes an optional HTTP status code as parameter, allowing to send informational responses such as Early Hints responses (103 status code)
  • Add IpUtils::isPrivateIp()
  • Add Request::getPayload(): InputBag
  • Deprecate conversion of invalid values in ParameterBag::getInt() and ParameterBag::getBoolean(),
  • Deprecate ignoring invalid values when using ParameterBag::filter(), unless flag FILTER_NULL_ON_FAILURE is set

Component/HttpKernel

  • Deprecate parameters container.dumper.inline_factories and container.dumper.inline_class_loader, use .container.dumper.inline_factories and .container.dumper.inline_class_loader instead
  • FileProfilerStorage removes profiles automatically after two days
  • Add #[WithHttpStatus] for defining status codes for exceptions
  • Use an instance of Psr\Clock\ClockInterface to generate the current date time in DateTimeValueResolver
  • Add #[WithLogLevel] for defining log levels for exceptions
  • Add skip_response_headers to the HttpCache options
  • Introduce targeted value resolvers with #[ValueResolver] and #[AsTargetedValueResolver]
  • Add #[MapRequestPayload] to map and validate request payload from Request::getContent() or Request::$request->all() to typed objects
  • Add #[MapQueryString] to map and validate request query string from Request::$query->all() to typed objects
  • Add #[MapQueryParameter] to map and validate individual query parameters to controller arguments
  • Collect data from every event dispatcher

Component/Intl

  • Add the special strip locale to EmojiTransliterator to strip all emojis from a string
  • Add compress script to compress the Resources/data directory when disk space matters

Component/Lock

  • Create migration for lock table when DoctrineDbalStore is used
  • Add optional parameter $isSameDatabase to DoctrineDbalStore::configureSchema()
  • Add support for Relay PHP extension for Redis
  • Renamed the gcProbablity option to gcProbability to fix a typo in its name

Component/Mailer/Bridge/Infobip

  • Add reporting behavior thanks to new attributes support

Component/Mailer/Bridge/MailerSend

  • Add the bridge

Component/Mailer/Bridge/Mailjet

  • Add sandbox option

Component/Mailer/Bridge/Postmark

  • Add support for webhooks

Component/Mailer

  • Add MessageEvent::reject() to allow rejecting an email before sending it
  • Change the default port for the mailgun+smtp transport from 465 to 587
  • Add $authenticators parameter in EsmtpTransport constructor and EsmtpTransport::setAuthenticators() to allow overriding of default eSMTP authenticators

Component/Messenger/Bridge/Redis

  • Add support for Relay PHP extension for Redis

Component/Messenger

  • Add support for namespace wildcards in the HandlersLocator to allow routing multiple messages within the same namespace
  • Deprecate Symfony\Component\Messenger\Transport\InMemoryTransport and Symfony\Component\Messenger\Transport\InMemoryTransportFactory in favor of Symfony\Component\Messenger\Transport\InMemory\InMemoryTransport and Symfony\Component\Messenger\Transport\InMemory\InMemoryTransportFactory
  • Allow passing a string instead of an array in TransportNamesStamp
  • Allow to define batch size when using BatchHandlerTrait with getBatchSize()
  • Deprecate StopWorkerOnSigtermSignalListener in favor of StopWorkerOnSignalsListener and make it configurable with SIGINT and SIGTERM by default
  • Add RedispatchMessage and RedispatchMessageHandler
  • Add optional parameter $isSameDatabase to DoctrineTransport::configureSchema()

Component/Mime

  • Support detection of related parts if Content-Id is used instead of the name
  • Add TextPart::getDisposition()

Component/Notifier/Bridge/AllMySms

  • Use AllMySmsOptions class

Component/Notifier/Bridge/Bandwidth

  • Add the bridge

Component/Notifier/Bridge/ClickSend

  • Add the bridge

Component/Notifier/Bridge/ContactEveryone

  • Add the ContactEveryoneOptions class

Component/Notifier/Bridge/Esendex

  • Add EsendexOptions class

Component/Notifier/Bridge/GatewayApi

  • Use GatewayApiOptions class

Component/Notifier/Bridge/GoogleChat

  • Deprecate GoogleChatOptions::card() in favor of cardV2()

Component/Notifier/Bridge/Isendpro

  • Add the bridge

Component/Notifier/Bridge/LineNotify

  • Add the bridge

Component/Notifier/Bridge/Mastodon

  • Add the bridge

Component/Notifier/Bridge/MessageBird

  • Add MessageBirdOptions class

Component/Notifier/Bridge/MessageMedia

  • Add MessageMediaOptions class

Component/Notifier/Bridge/PagerDuty

  • Add the bridge

Component/Notifier/Bridge/Plivo

  • Add the bridge

Component/Notifier/Bridge/Pushover

  • Add the bridge

Component/Notifier/Bridge/RingCentral

  • Add the bridge

Component/Notifier/Bridge/SimpleTextin

  • Add the bridge

Component/Notifier/Bridge/Slack

  • Allow to update Slack messages

Component/Notifier/Bridge/Smsapi

  • Changing the option from to optional to enable sending "eco" messages

Component/Notifier/Bridge/Smsmode

  • Add the bridge

Component/Notifier/Bridge/Telegram

  • Add support to answer callback queries
  • Add support for sendPhoto API method

Component/Notifier/Bridge/Termii

  • Add the bridge

Component/Notifier/Bridge/Twitter

  • Add the bridge

Component/Notifier

  • Introduce FromNotificationInterface for MessageInterface implementations

Component/OptionsResolver

  • Add OptionsResolver::setIgnoreUndefined() and OptionConfigurator::ignoreUndefined() to ignore not defined options while resolving

Component/PropertyAccess

  • Allow escaping . and [ with \ in PropertyPath

Component/RemoteEvent

  • Add the component (experimental)

Component/Scheduler

  • Add the component as experimental

Component/Security/Core

  • Add AttributesBasedUserProviderInterface to allow $attributes optional argument on loadUserByIdentifier
  • Add OidcUser with OIDC support for OidcUserInfoTokenHandler

Component/Security/Http

  • Add RememberMeBadge to JsonLoginAuthenticator and enable reading parameter in JSON request body
  • Add argument $exceptionCode to #[IsGranted]
  • Deprecate passing a secret as the 2nd argument to the constructor of Symfony\Component\Security\Http\RememberMe\PersistentRememberMeHandler
  • Add OidcUserInfoTokenHandler and OidcTokenHandler with OIDC support for AccessTokenAuthenticator
  • Add attributes optional array argument in UserBadge
  • Call UserBadge::userLoader with attributes if the argument is set
  • Allow to override badge fqcn on Passport::addBadge
  • Add SecurityTokenValueResolver to inject token as controller argument

Component/Semaphore

  • Add support for Relay PHP extension for Redis

Component/Serializer

  • Add AbstractNormalizer::REQUIRE_ALL_PROPERTIES context flag to require all properties to be listed in the input instead of falling back to null for nullable ones
  • Add XmlEncoder::SAVE_OPTIONS context option
  • Add BackedEnumNormalizer::ALLOW_INVALID_VALUES context option
  • Add UnsupportedFormatException which is thrown when there is no decoder for a given format
  • Add method getSupportedTypes(?string $format) to NormalizerInterface and DenormalizerInterface
  • Make ProblemNormalizer give details about ValidationFailedException and PartialDenormalizationException
  • Deprecate CacheableSupportsMethodInterface in favor of the new getSupportedTypes(?string $format) methods
  • The following Normalizer classes will become final in 7.0:
    • ConstraintViolationListNormalizer
    • CustomNormalizer
    • DataUriNormalizer
    • DateIntervalNormalizer
    • DateTimeNormalizer
    • DateTimeZoneNormalizer
    • GetSetMethodNormalizer
    • JsonSerializableNormalizer
    • ObjectNormalizer
    • PropertyNormalizer

Component/Validator

  • Add method getConstraint() to ConstraintViolationInterface
  • Add Uuid::TIME_BASED_VERSIONS to match that a UUID being validated embeds a timestamp
  • Add the pattern parameter in violations of the Regex constraint
  • Add a NoSuspiciousCharacters constraint to validate a string is not a spoofing attempt
  • Add a PasswordStrength constraint to check the strength of a password
  • Add the countUnit option to the Length constraint to allow counting the string length either by code points (like before, now the default setting Length::COUNT_CODEPOINTS), bytes (Length::COUNT_BYTES) or graphemes (Length::COUNT_GRAPHEMES)
  • Add the filenameMaxLength option to the File constraint
  • Add the exclude option to the Cascade constraint
  • Add the value_length parameter to Length constraint
  • Allow to disable the translation domain for ConstraintViolationInterface messages

Component/VarDumper

  • Add caster for WeakMap
  • Add support of named arguments to dd() and dump() to display the argument name
  • Add support for Relay\Relay
  • Add display of invisible characters

Component/Webhook

  • Add the component (experimental)

Component/Yaml

  • Add support to dump int keys as strings by using the Yaml::DUMP_NUMERIC_KEY_AS_STRING flag

Bridge/Doctrine

  • [BC BREAK] Add argument $buildDir to ProxyCacheWarmer::warmUp()
  • [BC BREAK] Add return type-hints to EntityFactory
  • Deprecate DbalLogger, use a middleware instead
  • Deprecate not constructing DoctrineDataCollector with an instance of DebugDataHolder
  • Deprecate DoctrineDataCollector::addLogger(), use a DebugDataHolder instead
  • Deprecate ContainerAwareLoader, use dependency injection in your fixtures instead
  • Always pass the Request object to EntityValueResolver's expression
  • [BC BREAK] Change argument $lastUsed of DoctrineTokenProvider::updateToken() to accept DateTimeInterface

Bridge/Monolog

  • Add native return type to Logger::clear() and to DebugProcessor::clear()
  • Deprecate class Logger, use HttpKernel's DebugLoggerConfigurator instead

Bridge/PhpUnit

  • Allow setting the locale using SYMFONY_PHPUNIT_LOCALE env var

Bridge/PsrHttpMessage

  • Import the bridge into the Symfony monorepo and synchronize releases
  • Remove ArgumentValueResolverInterface from PsrServerRequestResolver
  • Support php-http/discovery for auto-detecting PSR-17 factories

Bridge/Twig

  • Allow an array to be passed as the first argument to the importmap() Twig function
  • Add TemplatedEmail::locale() to set the locale for the email rendering
  • Add AppVariable::getEnabledLocales() to retrieve the enabled locales
  • Add impersonation_path() and impersonation_url() Twig functions

Bundle/FrameworkBundle

  • Add HttpClientAssertionsTrait
  • Add AbstractController::renderBlock() and renderBlockView()
  • Add native return type to Translator and to Application::reset()
  • Deprecate the integration of Doctrine annotations, either uninstall the doctrine/annotations package or disable the integration by setting framework.annotations to false
  • Enable json_decode_detailed_errors context for Serializer by default if kernel.debug is true and the seld/jsonlint package is installed
  • Add DomCrawlerAssertionsTrait::assertAnySelectorTextContains(string $selector, string $text)
  • Add DomCrawlerAssertionsTrait::assertAnySelectorTextSame(string $selector, string $text)
  • Add DomCrawlerAssertionsTrait::assertAnySelectorTextNotContains(string $selector, string $text)
  • Deprecate EnableLoggerDebugModePass, use argument $debug of HttpKernel's Logger instead
  • Deprecate AddDebugLogProcessorPass::configureLogger(), use HttpKernel's DebugLoggerConfigurator instead
  • Deprecate not setting the framework.handle_all_throwables config option; it will default to true in 7.0
  • Deprecate not setting the framework.php_errors.log config option; it will default to true in 7.0
  • Deprecate not setting the framework.session.cookie_secure config option; it will default to auto in 7.0
  • Deprecate not setting the framework.session.cookie_samesite config option; it will default to lax in 7.0
  • Deprecate not setting either framework.session.handler_id or save_path config options; handler_id will default to null in 7.0 if save_path is not set and to session.handler.native_file otherwise
  • Deprecate not setting the framework.uid.default_uuid_version config option; it will default to 7 in 7.0
  • Deprecate not setting the framework.uid.time_based_uuid_version config option; it will default to 7 in 7.0
  • Deprecate not setting the framework.validation.email_validation_mode config option; it will default to html5 in 7.0
  • Deprecate framework.validation.enable_annotations, use framework.validation.enable_attributes instead
  • Deprecate framework.serializer.enable_annotations, use framework.serializer.enable_attributes instead
  • Add array $tokenAttributes = [] optional parameter to KernelBrowser::loginUser()
  • Add support for relative URLs in BrowserKit's redirect assertion
  • Change BrowserKitAssertionsTrait::getClient() to be protected
  • Deprecate the framework.asset_mapper.provider config option
  • Add --exclude option to the cache:pool:clear command
  • Add parameters deprecations to the output of debug:container command
  • Change framework.asset_mapper.importmap_polyfill from a URL to the name of an item in the importmap
  • Provide $buildDir when running CacheWarmer to build read-only resources
  • Add the global --profile option to the console to enable profiling commands
  • Deprecate the routing.loader.annotation service, use the routing.loader.attribute service instead
  • Deprecate the routing.loader.annotation.directory service, use the routing.loader.attribute.directory service instead
  • Deprecate the routing.loader.annotation.file service, use the routing.loader.attribute.file service instead
  • Deprecate AnnotatedRouteControllerLoader, use AttributeRouteControllerLoader instead
  • Deprecate AddExpressionLanguageProvidersPass, use Symfony\Component\Routing\DependencyInjection\AddExpressionLanguageProvidersPass instead
  • Deprecate DataCollectorTranslatorPass, use Symfony\Component\Translation\DependencyInjection\DataCollectorTranslatorPass instead
  • Deprecate LoggingTranslatorPass, use Symfony\Component\Translation\DependencyInjection\LoggingTranslatorPass instead
  • Deprecate WorkflowGuardListenerPass, use Symfony\Component\Workflow\DependencyInjection\WorkflowGuardListenerPass instead

Bundle/SecurityBundle

  • Deprecate Security::ACCESS_DENIED_ERROR, AUTHENTICATION_ERROR and LAST_USERNAME constants, use the ones on SecurityRequestAttributes instead
  • Allow an array of pattern in firewall configuration
  • Add $badges argument to Security::login
  • Deprecate the require_previous_session config option. Setting it has no effect anymore
  • Add LogoutRouteLoader

Bundle/TwigBundle

  • Allow omitting the autoescape_service_method option when autoescape_service is set to an invokable service id

Bundle/WebProfilerBundle

  • Add console commands to the profiler

Component/AssetMapper

  • Mark the component as non experimental
  • Add CSS support to the importmap
  • Add "entrypoints" concept to the importmap
  • Always download packages locally instead of using a CDN
  • Allow relative path strings in the importmap
  • Automatically set _links attribute for preload CSS files for WebLink integration
  • Add PreAssetsCompileEvent event when running asset-map:compile
  • Add support for importmap paths to use the Asset component (for subdirectories)
  • Removed the importmap:export command
  • Add a importmap:install command to download all missing downloaded packages
  • Allow specifying packages to update for the importmap:update command
  • Add a importmap:audit command to check for security vulnerability advisories in dependencies
  • Add a importmap:outdated command to check for outdated packages
  • Change the polyfill used for the importmap renderer from a URL to an entry in the importmap

Component/BrowserKit

  • Add argument $serverParameters to AbstractBrowser::click() and AbstractBrowser::clickLink()

Component/Cache

  • EarlyExpirationHandler no longer implements MessageHandlerInterface, rely on AsMessageHandler instead

Component/Clock

  • Add DatePoint: an immutable DateTime implementation with stricter error handling and return types
  • Throw DateMalformedStringException/DateInvalidTimeZoneException when appropriate
  • Add $modifier argument to the now() helper

Component/Console

  • Add SignalMap to map signal value to its name
  • Multi-line text in vertical tables is aligned properly
  • The application can also catch errors with Application::setCatchErrors(true)
  • Add RunCommandMessage and RunCommandMessageHandler
  • Dispatch ConsoleTerminateEvent after an exit on signal handling and add ConsoleTerminateEvent::getInterruptingSignal()

Component/DependencyInjection

  • Allow using #[Target] with no arguments to state that a parameter must match a named autowiring alias
  • Deprecate ContainerAwareInterface and ContainerAwareTrait, use dependency injection instead
  • Add defined env var processor that returns true for defined and neither null nor empty env vars
  • Add #[AutowireLocator] and #[AutowireIterator] attributes

Component/DomCrawler

  • Add CrawlerAnySelectorTextContains test constraint
  • Add CrawlerAnySelectorTextSame test constraint
  • Add argument $default to Crawler::attr()

Component/ErrorHandler

  • FlattenExceptionNormalizer no longer implements ContextAwareNormalizerInterface

Component/Finder

  • Add early directory pruning to Finder::filter()

Component/Form

  • Deprecate using DateTime or DateTimeImmutable model data with a different timezone than configured with the model_timezone option in DateType, DateTimeType, and TimeType
  • Deprecate PostSetDataEvent::setData(), use PreSetDataEvent::setData() instead
  • Deprecate PostSubmitEvent::setData(), use PreSubmitDataEvent::setData() or SubmitDataEvent::setData() instead
  • Add duplicate_preferred_choices option in ChoiceType
  • Add $duplicatePreferredChoices parameter to ChoiceListFactoryInterface::createView()

Component/HtmlSanitizer

  • Add support for sanitizing unlimited length of HTML document

Component/HttpClient

  • Add HarFileResponseFactory testing utility, allow to replay responses from .har files
  • Add max_retries option to RetryableHttpClient to adjust the retry logic on a per request level
  • Add PingWehookMessage and PingWebhookMessageHandler
  • Enable using EventSourceHttpClient::connect() for both GET and POST

Component/HttpFoundation

  • Make HeaderBag::getDate(), Response::getDate(), getExpires() and getLastModified() return a DateTimeImmutable
  • Support root-level Generator in StreamedJsonResponse
  • Add UriSigner from the HttpKernel component
  • Add partitioned flag to Cookie (CHIPS Cookie)
  • Add argument bool $flush = true to Response::send()
  • Make MongoDbSessionHandler instantiable with the mongodb extension directly

Component/HttpKernel

  • Support backed enums in #[MapQueryParameter]
  • BundleInterface no longer extends ContainerAwareInterface
  • Add optional $className parameter to ControllerEvent::getAttributes()
  • Add native return types to TraceableEventDispatcher and to MergeExtensionConfigurationPass
  • Add argument $validationFailedStatusCode to #[MapQueryString] and #[MapRequestPayload]
  • Add argument $debug to Logger
  • Add class DebugLoggerConfigurator
  • Add parameters kernel.runtime_mode and kernel.runtime_mode.*, all set from env var APP_RUNTIME_MODE
  • Deprecate Kernel::stripComments()
  • Support the ! character at the beginning of a string as a negation operator in the url filter of the profiler
  • Deprecate UriSigner, use UriSigner from the HttpFoundation component instead
  • Deprecate FileLinkFormatter, use FileLinkFormatter from the ErrorHandler component instead
  • Add argument $buildDir to WarmableInterface
  • Add argument $filter to Profiler::find() and FileProfilerStorage::find()
  • Add ControllerResolver::allowControllers() to define which callables are legit controllers when the _check_controller_is_allowed request attribute is set

Component/Intl

  • Add support for ISO-3166-1 numeric codes with Countries::getNumericCode(), Countries::getNumericCodes(), Countries::numericCodeExists() and Countries::getAlpha2FromNumeric()

Component/Lock

  • Make MongoDbStore instantiable with the mongodb extension directly

Component/Mailer/Bridge/Brevo

  • Add support for RemoteEvent and Webhook
  • Add the bridge as a replacement of the deprecated Sendinblue one

Component/Mailer/Bridge/Mailjet

  • Add RemoteEvent and Webhook support

Component/Mailer/Bridge/Scaleway

  • Add the bridge

Component/Mailer/Bridge/Sendgrid

  • Add support for webhooks

Component/Mailer/Bridge/Sendinblue

  • Deprecate the bridge (use Brevo instead)

Component/Mailer

  • Add DSN parameter peer_fingerprint to verify TLS certificate fingerprint
  • Change the default port for the mailjet+smtp transport from 465 to 587

Component/Messenger/Bridge/AmazonSqs

  • Add AddFifoStampMiddleware to help adding AmazonSqsFifoStamp

Component/Messenger

  • Deprecate StopWorkerOnSignalsListener in favor of using the SignalableCommandInterface
  • Add HandlerDescriptor::getOptions
  • Add support for multiple Redis Sentinel hosts
  • Add --all option to the messenger:failed:remove command
  • RejectRedeliveredMessageException implements UnrecoverableExceptionInterface in order to not be retried
  • Add WrappedExceptionsInterface interface for exceptions that hold multiple individual exceptions
  • Deprecate HandlerFailedException::getNestedExceptions(), HandlerFailedException::getNestedExceptionsOfClass() and DelayedMessageHandlingException::getExceptions() which are replaced by a new getWrappedExceptions() method

Component/Notifier/Bridge/Brevo

  • Add the bridge

Component/Notifier/Bridge/GoIp

  • Add the bridge

Component/Notifier/Bridge/Novu

  • Add the bridge

Component/Notifier/Bridge/Ntfy

  • Add the bridge

Component/Notifier/Bridge/Redlink

  • Add the bridge

Component/Notifier/Bridge/Sendinblue

  • Deprecate the bridge (use Brevo instead)

Component/Notifier/Bridge/SpotHit

  • Support SMSLong and SMSLongNBr API parameters

Component/Notifier/Bridge/Telegram

  • Add support for sendLocation, sendAudio, sendDocument, sendVideo, sendAnimation, sendVenue, sendContact and sendSticker API methods
  • Add support for sending local files

Component/Notifier/Bridge/Vonage

  • Add support for RemoteEvent and Webhook

Component/OptionsResolver

  • Improve message with full path on invalid type in nested option

Component/Process

  • Add PhpSubprocess to handle PHP subprocesses that take over the configuration from their parent
  • Add RunProcessMessage and RunProcessMessageHandler
  • Support using Process::findExecutable() independently of open_basedir

Component/PropertyInfo

  • Make properties writable when a setter in camelCase exists, similar to the camelCase getter

Component/RateLimiter

  • Add SlidingWindowLimiter::reserve()

Component/RemoteEvent

  • Mark the component as non experimental

Component/Routing

  • Add FQCN and FQCN::method aliases for routes loaded from attributes/annotations when applicable
  • Add native return type to AnnotationClassLoader::setResolver()
  • Deprecate Doctrine annotations support in favor of native attributes
  • Change the constructor signature of AnnotationClassLoader to __construct(?string $env = null), passing an annotation reader as first argument is deprecated
  • Deprecate AnnotationClassLoader, use AttributeClassLoader instead
  • Deprecate AnnotationDirectoryLoader, use AttributeDirectoryLoader instead
  • Deprecate AnnotationFileLoader, use AttributeFileLoader instead
  • Add AddExpressionLanguageProvidersPass (moved from FrameworkBundle)
  • Add aliases for all classes in the Annotation namespace to Attribute

Component/Runtime

  • Add argument bool $debug = false to HttpKernelRunner::__construct()

Component/Scheduler

  • Mark the component as non experimental
  • [BC BREAK] Add from() to CheckpointInterface
  • Add --date and --all options to the schedule:debug command
  • Allow setting timezone of next run date in CronExpressionTrigger
  • Add AbstractTriggerDecorator
  • Make ScheduledStamp "send-able"
  • Add ScheduledStamp to RedispatchMessage
  • Allow modifying Schedule instances at runtime
  • Add MessageProviderInterface to trigger unique messages at runtime
  • Add PreRunEvent and PostRunEvent events
  • Add DispatchSchedulerEventListener
  • Add FailureEvent event

Component/Security/Core

  • Make PersistentToken immutable
  • Deprecate accepting only DateTime for TokenProviderInterface::updateToken(), use DateTimeInterface instead

Component/Security/Http

  • UserValueResolver no longer implements ArgumentValueResolverInterface
  • Deprecate calling the constructor of DefaultLoginRateLimiter with an empty secret

Component/Serializer

  • Add TranslatableNormalizer
  • Allow Context attribute to target classes
  • Deprecate Doctrine annotations support in favor of native attributes
  • Allow the Groups attribute/annotation on classes
  • JsonDecode: Add json_decode_detailed_errors option
  • Make ProblemNormalizer give details about Messenger's ValidationFailedException
  • Add XmlEncoder::CDATA_WRAPPING context option
  • Deprecate AnnotationLoader, use AttributeLoader instead
  • Add aliases for all classes in the Annotation namespace to Attribute

Component/Templating

  • Deprecate the component, use Twig instead

Component/Translation/Bridge/Phrase

  • Create the bridge

Component/Translation

  • Give current locale to LocaleSwitcher::runWithLocale()'s callback
  • Add --as-tree option to translation:pull command to write YAML messages as a tree-like structure
  • [BC BREAK] Add argument $buildDir to DataCollectorTranslator::warmUp()
  • Add DataCollectorTranslatorPass and LoggingTranslatorPass (moved from FrameworkBundle)
  • Add PhraseTranslationProvider

Component/Validator

  • Add is_valid function to the Expression constraint, its behavior is the same as ValidatorInterface::validate
  • Allow single integer for the versions option of the Uuid constraint
  • Allow single constraint to be passed to the constraints option of the When constraint
  • Deprecate Doctrine annotations support in favor of native attributes
  • Deprecate ValidatorBuilder::setDoctrineAnnotationReader()
  • Deprecate ValidatorBuilder::addDefaultDoctrineAnnotationReader()
  • Add number, finite-number and finite-float types to Type constraint
  • Add the withSeconds option to the Time constraint that allows to pass time without seconds
  • Deprecate ValidatorBuilder::enableAnnotationMapping(), use ValidatorBuilder::enableAttributeMapping() instead
  • Deprecate ValidatorBuilder::disableAnnotationMapping(), use ValidatorBuilder::disableAttributeMapping() instead
  • Deprecate AnnotationLoader, use AttributeLoader instead
  • Add GroupProviderInterface to implement validation group providers outside the underlying class

Component/VarDumper

  • Dump uninitialized properties

Component/VarExporter

  • Deprecate per-property lazy-initializers

Component/Webhook

  • Mark the component as non experimental

Component/Workflow

  • Add with-metadata option to the workflow:dump command to include places, transitions and workflow's metadata into dumped graph
  • Add support for storing marking in a property
  • Add a profiler
  • Add support for multiline descriptions in PlantUML diagrams
  • Add PHP attributes to register listeners and guards
  • Deprecate GuardEvent::getContext() method that will be removed in 7.0
  • Revert: Mark Symfony\Component\Workflow\Registry as internal
  • Add WorkflowGuardListenerPass (moved from FrameworkBundle)

Bridge/Doctrine

  • Remove DoctrineDbalCacheAdapterSchemaSubscriber, use DoctrineDbalCacheAdapterSchemaListener instead
  • Remove MessengerTransportDoctrineSchemaSubscriber, use MessengerTransportDoctrineSchemaListener instead
  • Remove RememberMeTokenProviderDoctrineSchemaSubscriber, use RememberMeTokenProviderDoctrineSchemaListener instead
  • Remove DbalLogger, use a middleware instead
  • Remove DoctrineDataCollector::addLogger(), use a DebugDataHolder instead
  • Remove ContainerAwareLoader, use dependency injection in your fixtures instead
  • ContainerAwareEventManager::getListeners() must be called with an event name
  • DoctrineBridge now requires doctrine/event-manager:^2
  • Add parameter $isSameDatabase to DoctrineTokenProvider::configureSchema()
  • added DoctrineChoiceLoader
  • deprecated EntityChoiceList
  • deprecated passing a query builder closure to ORMQueryBuilderLoader
  • deprecated $manager and $em arguments of ORMQueryBuilderLoader
  • added optional arguments $propertyAccessor and $choiceListFactory to DoctrineOrmExtension constructor
  • deprecated "loader" and "property" options of DoctrineType

Bridge/Monolog

  • Drop support for monolog < 3.0
  • Remove class Logger, use HttpKernel's DebugLoggerConfigurator instead

Bridge/Twig

  • Drop support for Twig 2
  • added LogoutUrlExtension (provides logout_url and logout_path)
  • added an HttpFoundation extension (provides the absolute_url and the relative_path functions)
  • added AssetExtension (provides the asset and asset_version functions)
  • Added possibility to extract translation messages from a file or files besides extracting from a directory

Bundle/FrameworkBundle

  • Remove command translation:update, use translation:extract instead
  • Make the http_method_override config option default to false
  • Remove AbstractController::renderForm(), use render() instead
  • Remove the Symfony\Component\Serializer\Normalizer\ObjectNormalizer and Symfony\Component\Serializer\Normalizer\PropertyNormalizer autowiring aliases, type-hint against Symfony\Component\Serializer\Normalizer\NormalizerInterface or implement NormalizerAwareInterface instead
  • Remove the Http\Client\HttpClient service, use Psr\Http\Client\ClientInterface instead
  • Remove the integration of Doctrine annotations, use native attributes instead
  • Remove EnableLoggerDebugModePass, use argument $debug of HttpKernel's Logger instead
  • Remove AddDebugLogProcessorPass::configureLogger(), use HttpKernel's DebugLoggerConfigurator instead
  • Make the framework.handle_all_throwables config option default to true
  • Make the framework.php_errors.log config option default to true
  • Make the framework.session.cookie_secure config option default to auto
  • Make the framework.session.cookie_samesite config option default to lax
  • Make the framework.session.handler_id default to null if save_path is not set and to session.handler.native_file otherwise
  • Make the framework.uid.default_uuid_version config option default to 7
  • Make the framework.uid.time_based_uuid_version config option default to 7
  • Make the framework.validation.email_validation_mode config option default to html5
  • Remove the framework.validation.enable_annotations config option, use framework.validation.enable_attributes instead
  • Remove the framework.serializer.enable_annotations config option, use framework.serializer.enable_attributes instead
  • Remove the routing.loader.annotation service, use the routing.loader.attribute service instead
  • Remove the routing.loader.annotation.directory service, use the routing.loader.attribute.directory service instead
  • Remove the routing.loader.annotation.file service, use the routing.loader.attribute.file service instead
  • Remove AnnotatedRouteControllerLoader, use AttributeRouteControllerLoader instead
  • Remove AddExpressionLanguageProvidersPass, use Symfony\Component\Routing\DependencyInjection\AddExpressionLanguageProvidersPass instead
  • Remove DataCollectorTranslatorPass, use Symfony\Component\Translation\DependencyInjection\DataCollectorTranslatorPass instead
  • Remove LoggingTranslatorPass, use Symfony\Component\Translation\DependencyInjection\LoggingTranslatorPass instead
  • Remove WorkflowGuardListenerPass, use Symfony\Component\Workflow\DependencyInjection\WorkflowGuardListenerPass instead
  • Added possibility to extract translation messages from a file or files besides extracting from a directory
  • Added TranslationsCacheWarmer to create catalogues at warmup

Bundle/SecurityBundle

  • Enabling SecurityBundle and not configuring it is not allowed
  • Remove the enable_authenticator_manager config option
  • Remove the security.firewalls.logout.csrf_token_generator config option, use security.firewalls.logout.csrf_token_manager instead
  • Remove the require_previous_session config option from authenticators

Bundle/TwigBundle

  • Remove the Twig_Environment autowiring alias, use Twig\Environment instead
  • Remove option twig.autoescape; create a class that implements your escaping strategy (check FileExtensionEscapingStrategy::guess() for inspiration) and reference it using the twig.autoescape_service option instead
  • Drop support for Twig 2
  • made it possible to configure the default formats for both the date and the number_format filter
  • added support for the new Asset component (from Twig bridge)
  • deprecated the assets extension (use the one from the Twig bridge instead)

Bundle/WebProfilerBundle

  • [BC BREAK] if you are using a DB to store profiles, the table must be dropped
  • added the HTTP status code to profiles

Component/Asset

  • added the component

Component/Cache

  • Add parameter $isSameDatabase to DoctrineDbalAdapter::configureSchema()
  • Drop support for Postgres < 9.5 and SQL Server < 2008 in DoctrineDbalAdapter

Component/Config

  • Require explicit argument when calling NodeBuilder::setParent()
  • added ConfigCacheInterface, ConfigCacheFactoryInterface and a basic ConfigCacheFactory implementation to delegate creation of ConfigCache instances

Component/Console

  • Add method __toString() to InputInterface
  • Remove Command::$defaultName and Command::$defaultDescription, use the AsCommand attribute instead
  • Require explicit argument when calling *Command::setApplication(), *FormatterStyle::setForeground/setBackground(), Helper::setHelpSet(), Input*::setDefault() and Question::setAutocompleterCallback/setValidator()
  • Remove StringInput::REGEX_STRING

Component/DependencyInjection

  • Remove #[MapDecorated], use #[AutowireDecorated] instead
  • Remove ProxyHelper, use Symfony\Component\VarExporter\ProxyHelper instead
  • Remove ReferenceSetArgumentTrait
  • Remove support of @required annotation, use the Symfony\Contracts\Service\Attribute\Required attribute instead
  • Require explicit argument when calling ContainerAwareTrait::setContainer()
  • Remove PhpDumper options inline_factories_parameter and inline_class_loader_parameter, use options inline_factories and inline_class_loader instead
  • Parameter names of ParameterBag cannot be numerics
  • Remove ContainerAwareInterface and ContainerAwareTrait, use dependency injection instead
  • Add argument $id and $asGhostObject to DumperInterface::isProxyCandidate() and getProxyCode()
  • Add argument $source to FileLoader::registerClasses()
  • deprecated synchronized services

Component/DomCrawler

  • Add argument $normalizeWhitespace to Crawler::innerText()
  • Add argument $default to Crawler::attr()

Component/ExpressionLanguage

  • The in and not in operators now use strict comparison

Component/Filesystem

  • Add argument $lock to Filesystem::appendToFile()

Component/Form

  • Throw when using DateTime or DateTimeImmutable model data with a different timezone than configured with the model_timezone option in DateType, DateTimeType, and TimeType
  • Make the "widget" option of date/time form types default to "single_text"
  • Require explicit argument when calling Button/Form::setParent(), ButtonBuilder/FormConfigBuilder::setDataMapper(), TransformationFailedException::setInvalidMessage()
  • added option "choice_translation_domain" to ChoiceType.
  • deprecated option "precision" in favor of "scale"
  • deprecated the overwriting of AbstractType::setDefaultOptions() in favor of overwriting AbstractType::configureOptions().
  • deprecated the overwriting of AbstractTypeExtension::setDefaultOptions() in favor of overwriting AbstractTypeExtension::configureOptions().
  • added new ChoiceList interface and implementations in the Symfony\Component\Form\ChoiceList namespace
  • added new ChoiceView in the Symfony\Component\Form\ChoiceList\View namespace
  • choice groups are now represented by ChoiceGroupView objects in the view
  • deprecated the old ChoiceList interface and implementations
  • deprecated the old ChoiceView class
  • added CheckboxListMapper and RadioListMapper
  • deprecated ChoiceToBooleanArrayTransformer and ChoicesToBooleanArrayTransformer
  • deprecated FixCheckboxInputListener and FixRadioInputListener
  • deprecated the "choice_list" option of ChoiceType
  • added new options to ChoiceType:
    • "choices_as_values"
    • "choice_loader"
    • "choice_label"
    • "choice_name"
    • "choice_value"
    • "choice_attr"
    • "group_by"

Component/HttpClient

  • Remove implementing Http\Message\RequestFactory from HttplugClient

Component/HttpFoundation

  • Calling ParameterBag::filter() throws an UnexpectedValueException on invalid value, unless flag FILTER_NULL_ON_FAILURE is set
  • Calling ParameterBag::getInt() and ParameterBag::getBool() throws an UnexpectedValueException on invalid value
  • Remove classes RequestMatcher and ExpressionRequestMatcher
  • Remove Request::getContentType(), use Request::getContentTypeFormat() instead
  • Throw an InvalidArgumentException when calling Request::create() with a malformed URI
  • Require explicit argument when calling JsonResponse::setCallback(), Response::setExpires/setLastModified/setEtag(), MockArraySessionStorage/NativeSessionStorage::setMetadataBag(), NativeSessionStorage::setSaveHandler()
  • Add argument $statusCode to Response::sendHeaders() and StreamedResponse::sendHeaders()

Component/HttpKernel

  • Add argument $reflector to ArgumentResolverInterface::getArguments() and ArgumentMetadataFactoryInterface::createArgumentMetadata()
  • Remove ArgumentValueResolverInterface, use ValueResolverInterface instead
  • Remove StreamedResponseListener
  • Remove AbstractSurrogate::$phpEscapeMap
  • Remove HttpKernelInterface::MASTER_REQUEST
  • Remove terminate_on_cache_hit option from HttpCache
  • Require explicit argument when calling ConfigDataCollector::setKernel(), RouterListener::setCurrentRequest()
  • Remove Kernel::stripComments()
  • Remove FileLinkFormatter, use FileLinkFormatter from the ErrorHandler component instead
  • Remove UriSigner, use UriSigner from the HttpFoundation component instead
  • Add argument $buildDir to WarmableInterface
  • Add argument $filter to Profiler::find() and FileProfilerStorage::find()
  • added the HTTP status code to profiles

Component/Ldap

  • Remove {username} parameter, use {user_identifier} instead

Component/Lock

  • Add parameter $isSameDatabase to DoctrineDbalStore::configureSchema()
  • Remove the gcProbablity (notice the typo) option, use gcProbability instead

Component/Mailer

  • Remove the OhMySmtp bridge in favor of the MailPace bridge

Component/Messenger

  • Add parameter $isSameDatabase to DoctrineTransport::configureSchema()
  • Remove MessageHandlerInterface and MessageSubscriberInterface, use #[AsMessageHandler] instead
  • Remove StopWorkerOnSigtermSignalListener in favor of using the SignalableCommandInterface
  • Remove StopWorkerOnSignalsListener in favor of using the SignalableCommandInterface
  • Remove Symfony\Component\Messenger\Transport\InMemoryTransport and Symfony\Component\Messenger\Transport\InMemoryTransportFactory in favor of Symfony\Component\Messenger\Transport\InMemory\InMemoryTransport and Symfony\Component\Messenger\Transport\InMemory\InMemoryTransportFactory
  • Remove HandlerFailedException::getNestedExceptions(), HandlerFailedException::getNestedExceptionsOfClass() and DelayedMessageHandlingException::getExceptions() which are replaced by a new getWrappedExceptions() method

Component/Mime

  • Remove Email::attachPart(), use Email::addPart() instead
  • Argument $body is now required (at least null) in Message::setBody()
  • Require explicit argument when calling Message::setBody()

Component/Notifier/Bridge/GoogleChat

  • Remove GoogleChatOptions::card() in favor of cardV2()

Component/PropertyAccess

  • Add method isNullSafe() to PropertyPathInterface
  • Require explicit argument when calling PropertyAccessorBuilder::setCacheItemPool()
  • UnexpectedTypeException now expects three constructor arguments: The invalid property value, the PropertyPathInterface object and the current index of the property path.

Component/Routing

  • Add argument $routeParameters to UrlMatcher::handleRouteRequirements()
  • Remove Doctrine annotations support in favor of native attributes
  • Remove AnnotationClassLoader, use AttributeClassLoader instead
  • Remove AnnotationDirectoryLoader, use AttributeDirectoryLoader instead
  • Remove AnnotationFileLoader, use AttributeFileLoader instead

Component/Security

  • added LogoutUrlGenerator
  • added the triggering of the Symfony\Component\Security\Http\SecurityEvents::INTERACTIVE_LOGIN in Symfony\Component\Security\Http\Firewall\SimplePreAuthenticationListener
  • The MaskBuilder logic has been abstracted in the Symfony\Component\Security\Acl\Permission\AbstractMaskBuilder and described in the Symfony\Component\Security\Acl\Permission\MaskBuilderInterface
  • added interface Symfony\Component\Security\Acl\Permission\MaskBuilderRetrievalInterface

Component/Security/Core

  • Remove the Security class, use Symfony\Bundle\SecurityBundle\Security instead
  • Require explicit argument when calling TokenStorage::setToken()
  • Change argument $lastUsed of TokenProviderInterface::updateToken() to accept DateTimeInterface

Component/Security/Http

  • Add argument $badgeFqcn to Passport::addBadge()
  • Add argument $lifetime to LoginLinkHandlerInterface::createLoginLink()
  • Throw when calling the constructor of DefaultLoginRateLimiter with an empty secret

Component/Serializer

  • Add method getSupportedTypes() to DenormalizerInterface and NormalizerInterface
  • Remove denormalization support for AbstractUid in UidNormalizer, use one of AbstractUid child class instead
  • Denormalizing to an abstract class in UidNormalizer now throws an \Error
  • Remove ContextAwareDenormalizerInterface, use DenormalizerInterface instead
  • Remove ContextAwareNormalizerInterface, use NormalizerInterface instead
  • Remove CacheableSupportsMethodInterface, use NormalizerInterface and DenormalizerInterface instead
  • Require explicit argument when calling AttributeMetadata::setSerializedName() and ClassMetadata::setClassDiscriminatorMapping()
  • Add argument $context to NormalizerInterface::supportsNormalization() and DenormalizerInterface::supportsDenormalization()
  • Remove Doctrine annotations support in favor of native attributes
  • Remove AnnotationLoader, use AttributeLoader instead
  • added support for serialization and deserialization groups including annotations, XML and YAML mapping.
  • added AbstractNormalizer to factorise code and ease normalizers development
  • added circular references handling for PropertyNormalizer
  • added support for a context key called object_to_populate in AbstractNormalizer to reuse existing objects in the deserialization process
  • added NameConverterInterface and CamelCaseToSnakeCaseNameConverter
  • [DEPRECATION] GetSetMethodNormalizer::setCamelizedAttributes() and PropertyNormalizer::setCamelizedAttributes() are replaced by CamelCaseToSnakeCaseNameConverter
  • [DEPRECATION] the Exception interface has been renamed to ExceptionInterface
  • added ObjectNormalizer leveraging the PropertyAccess component to normalize objects containing both properties and getters / setters / issers / hassers methods.
  • added xml_type_cast_attributes context option for allowing users to opt-out of typecasting xml attributes.

Component/Translation

  • Remove PhpStringTokenParser
  • Remove PhpExtractor in favor of PhpAstExtractor
  • added DataCollectorTranslator for collecting the translated messages.

Component/Validator

  • Add methods getConstraint(), getCause() and __toString() to ConstraintViolationInterface
  • Add method __toString() to ConstraintViolationListInterface
  • Add method disableTranslation() to ConstraintViolationBuilderInterface
  • Remove static property $errorNames from all constraints, use const ERROR_NAMES instead
  • Remove static property $versions from the Ip constraint, use the VERSIONS constant instead
  • Remove VALIDATION_MODE_LOOSE from Email constraint, use VALIDATION_MODE_HTML5 instead
  • Remove constraint ExpressionLanguageSyntax, use ExpressionSyntax instead
  • Remove Doctrine annotations support in favor of native attributes
  • Remove the annotation reader parameter from the constructor signature of AnnotationLoader
  • Remove ValidatorBuilder::setDoctrineAnnotationReader()
  • Remove ValidatorBuilder::addDefaultDoctrineAnnotationReader()
  • Remove ValidatorBuilder::enableAnnotationMapping(), use ValidatorBuilder::enableAttributeMapping() instead
  • Remove ValidatorBuilder::disableAnnotationMapping(), use ValidatorBuilder::disableAttributeMapping() instead
  • Remove AnnotationLoader, use AttributeLoader instead
  • deprecated DefaultTranslator in favor of Symfony\Component\Translation\IdentityTranslator
  • deprecated PHP7-incompatible constraints (Null, True, False) and related validators (NullValidator, TrueValidator, FalseValidator) in favor of their Is-prefixed equivalent

Component/VarDumper

  • Add argument $label to VarDumper::dump()
  • Require explicit argument when calling VarDumper::setHandler()
  • Remove display of backtrace in Twig_Template, only Twig\Template is supported
  • deprecated Cloner\Data::getLimitedClone(). Use withMaxDepth, withMaxItemsPerDepth or withRefHandles instead.

Component/Workflow

  • Require explicit argument when calling Definition::setInitialPlaces()
  • GuardEvent::getContext() method has been removed. Method was not supposed to be called within guard event listeners as it always returned an empty array anyway.
  • Remove GuardEvent::getContext() method without replacement

Component/Yaml

  • Remove the !php/const: tag, use !php/const instead (without the colon)

Bundle/FrameworkBundle

  • Add CheckAliasValidityPass to lint:container command
  • Add private_ranges as a shortcut for private IP address ranges to the trusted_proxies option
  • Mark classes ConfigBuilderCacheWarmer, Router, SerializerCacheWarmer, TranslationsCacheWarmer, Translator and ValidatorCacheWarmer as final
  • Move the Router cache_dir to kernel.build_dir
  • Deprecate the router.cache_dir config option
  • Add rate_limiter tags to rate limiter services
  • Add secrets:reveal command
  • Add rate_limiter option to http_client.default_options and http_client.scoped_clients

Bundle/SecurityBundle

  • Mark class ExpressionCacheWarmer as final

Bundle/TwigBundle

  • Mark class TemplateCacheWarmer as final

Component/Cache

  • Add option sentinel_master as an alias for redis_sentinel
  • Deprecate CouchbaseBucketAdapter, use CouchbaseCollectionAdapter
  • Add support for URL encoded characters in Couchbase DSN
  • Add support for using DSN with PDOAdapter

Component/Config

  • Allow custom meta location in ResourceCheckerConfigCache
  • Allow custom meta location in ConfigCache

Component/CssSelector

  • Add support for :is()
  • Add support for :where()

Component/DependencyInjection

  • Add CheckAliasValidityPass to check service compatibility with aliased interface
  • Add argument $prepend to ContainerConfigurator::extension() to prepend the configuration instead of appending it
  • Have ServiceLocator implement ServiceCollectionInterface
  • Add #[Lazy] attribute as shortcut for #[Autowire(lazy: [bool|string])] and #[Autoconfigure(lazy: [bool|string])]

Component/Dotenv

  • Add SYMFONY_DOTENV_PATH variable with the path to the .env file loaded by Dotenv::loadEnv() or Dotenv::bootEnv()

Component/Emoji

  • Add the component

Component/ExpressionLanguage

  • Add support for PHP min and max functions
  • Add Parser::IGNORE_UNKNOWN_VARIABLES and Parser::IGNORE_UNKNOWN_FUNCTIONS flags to control whether parsing and linting should check for unknown variables and functions.
  • Deprecate passing null as the allowed variable names to ExpressionLanguage::lint() and Parser::lint(), pass the IGNORE_UNKNOWN_VARIABLES flag instead to ignore unknown variables during linting

Component/Form

  • Add option separator to ChoiceType to use a custom separator after preferred choices (use the new separator_html option to display the separator text as HTML)
  • Deprecate not configuring the default_protocol option of the UrlType, it will default to null in 8.0
  • Add a keep_as_list option to CollectionType
  • Add a new model_type option to MoneyType, to be able to cast the transformed value to integer

Component/HttpClient

  • Add HttpOptions::setHeader() to add or replace a single header
  • Allow mocking start_time info in MockResponse
  • Add MockResponse::fromFile() and JsonMockResponse::fromFile() methods to help using fixtures files
  • Add ThrottlingHttpClient to enable limiting the number of requests within a certain period

Component/HttpFoundation

  • Add UploadedFile::getClientOriginalPath()
  • Add QueryParameterRequestMatcher
  • Add HeaderRequestMatcher
  • Add support for \SplTempFileObject in BinaryFileResponse

Component/HttpKernel

  • Add method isKernelTerminating() to ExceptionEvent that allows to check if an exception was thrown while the kernel is being terminated
  • Add HttpException::fromStatusCode()
  • Add $validationFailedStatusCode argument to #[MapQueryParameter] that allows setting a custom HTTP status code when validation fails

Component/Intl

  • Move all emoji code & data to a new symfony/emoji component
  • Deprecate EmojiTransliterator in favor of Symfony\Component\Emoji\EmojiTransliterator

Component/Mailer/Bridge/Azure

  • Add the bridge

Component/Mailer/Bridge/MailerSend

  • Add support for RemoteEvent and Webhook

Component/Mailer/Bridge/Resend

  • Add the bridge

Component/Mailer

  • Dispatch Postmark's "406 - Inactive recipient" API error code as a PostmarkDeliveryEvent instead of throwing an exception
  • Add DSN param auto_tls to disable automatic STARTTLS

Component/Messenger/Bridge/Amqp

  • Add option delay[arguments] in the transport definition

Component/Messenger/Bridge/Doctrine

  • Use SKIP LOCKED in the doctrine transport for MySQL, PostgreSQL and MSSQL

Component/Messenger

  • Add option redis_sentinel as an alias for sentinel_master
  • Add --all option to the messenger:consume command
  • Make #[AsMessageHandler] final
  • Add parameter $jitter to MultiplierRetryStrategy in order to randomize delay and prevent the thundering herd effect

Component/Notifier/Bridge/Bluesky

  • Add the bridge

Component/Notifier/Bridge/OneSignal

  • Add OneSignalOptions::isExternalUserId() to indicate that recipient is an external user id

Component/Notifier/Bridge/Pushy

  • Add the bridge

Component/Notifier/Bridge/Sevenio

  • Add the bridge

Component/Notifier/Bridge/SmsSluzba

  • Add the bridge

Component/Notifier/Bridge/Unifonic

  • Add the bridge

Component/PropertyInfo

  • Introduce PropertyDocBlockExtractorInterface to extract a property's doc block
  • Restrict access to PhpStanExtractor based on visibility

Component/Security/Http

  • Add #[IsCsrfTokenValid] attribute
  • Add CAS 2.0 access token handler

Component/Serializer

  • Add DateTimeNormalizer::CAST_KEY context option
  • Add Default and "class name" default groups

Component/String

  • Add localeLower(), localeUpper(), localeTitle() methods to AbstractUnicodeString

Component/Translation

  • Mark class DataCollectorTranslator as final

Component/TypeInfo

  • Add the component

Component/Uid

  • Add UuidV1::toV6(), UuidV1::toV7() and UuidV6::toV7()
  • Add AbstractUid::toString()

Component/Validator

  • Add support for Stringable values when using the Cidr, CssColor, ExpressionSyntax and PasswordStrength constraints
  • Add MacAddress constraint
  • Add *_NO_PUBLIC, *_ONLY_PRIVATE and *_ONLY_RESERVED versions to Ip constraint
  • Possibility to use all Ip constraint versions for Cidr constraint
  • Add list and associative_array types to Type constraint
  • Add the Charset constraint

Component/Workflow

  • Add method getEnabledTransition() to WorkflowInterface
  • Automatically register places from transitions

Component/Yaml

  • Add support for getting all the enum cases with !php/enum Foo
#!/usr/bin/env bash
# YOLO
VERSION=${1:-7.0}
PATH_TO_SYMFONY=$HOME/dev/github.com/symfony/symfony
(cd $PATH_TO_SYMFONY && git fetch && git co $VERSION && git reset --hard origin/$VERSION)
for file in `find $PATH_TO_SYMFONY -name CHANGELOG.md ! -path '*vendor*' | sort` ; do changelog=`rg "$VERSION(\.0)?\n---+\n\n(.*?)\n(\n|$)" -U --multiline-dotall -or '$2' $file` ; if [[ ! -z $changelog ]] ; then echo `echo "$file" | sed -e 's|^.*src/Symfony/|## |' -e 's#/CHANGELOG.md##'` && echo && echo "$changelog" && echo ; fi done > CHANGELOG-$VERSION.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment