CHANGELOG
=========

7.4
---

 * Auto-generate `config/reference.php` to assist in writing and discovering app's configuration
 * Auto-register routes from attributes found on controller services
 * Add `ControllerHelper`; the helpers from AbstractController as a standalone service
 * Allow using their name without added suffix when using `#[Target]` for custom services
 * Deprecate `Symfony\Bundle\FrameworkBundle\Console\Application::add()` in favor of `Symfony\Bundle\FrameworkBundle\Console\Application::addCommand()`
 * Add `assertEmailAddressNotContains()` to the `MailerAssertionsTrait`
 * Add `framework.type_info.aliases` option
 * Add `KernelBrowser::getSession()`
 * Add support for configuring workflow places with glob patterns matching consts/backed enums
 * Add support for configuring the `CachingHttpClient`
 * Add support for weighted transitions in workflows
 * Add support for union types with `Symfony\Component\EventDispatcher\Attribute\AsEventListener`
 * Add `framework.allowed_http_method_override` option
 * Initialize `router.request_context`'s `_locale` parameter to `%kernel.default_locale%`
 * Deprecate `ConfigBuilderCacheWarmer`, return PHP arrays from your config instead
 * Add support for selecting the appropriate error renderer based on the `APP_RUNTIME_MODE` env var
 * Add `KernelInterface::getShareDir()`, `APP_SHARE_DIR` and `%kernel.share_dir%` to store application data that are shared between all front-end servers

7.3
---

 * Add `errors.php` and `webhook.php` routing configuration files (use them instead of their XML equivalent)

   Before:

   ```yaml
   when@dev:
       _errors:
           resource: '@FrameworkBundle/Resources/config/routing/errors.xml'
           prefix: /_error

   webhook:
       resource: '@FrameworkBundle/Resources/config/routing/webhook.xml'
       prefix: /webhook
   ```

   After:

   ```yaml
   when@dev:
       _errors:
           resource: '@FrameworkBundle/Resources/config/routing/errors.php'
           prefix: /_error

   webhook:
       resource: '@FrameworkBundle/Resources/config/routing/webhook.php'
       prefix: /webhook
   ```

 * Add support for the ObjectMapper component
 * Add support for assets pre-compression
 * Rename `TranslationUpdateCommand` to `TranslationExtractCommand`
 * Add JsonStreamer services and configuration
 * Add new `framework.property_info.with_constructor_extractor` option to allow enabling or disabling the constructor extractor integration
 * Deprecate the `--show-arguments` option of the `container:debug` command, as arguments are now always shown
 * Add autowiring alias for `RateLimiterFactoryInterface`
 * Add `framework.validation.disable_translation` option
 * Add support for signal plain name in the `messenger.stop_worker_on_signals` configuration
 * Deprecate the `framework.validation.cache` option
 * Add `--method` option to the `debug:router` command
 * Auto-exclude DI extensions, test cases, entities and messenger messages
 * Add DI alias from `ServicesResetterInterface` to `services_resetter`
 * Add `methods` argument in `#[IsCsrfTokenValid]` attribute
 * Allow configuring the logging channel per type of exceptions
 * Enable service argument resolution on classes that use the `#[Route]` attribute,
   the `#[AsController]` attribute is no longer required
 * Deprecate setting the `framework.profiler.collect_serializer_data` config option to `false`
 * Set `framework.rate_limiter.limiters.*.lock_factory` to `auto` by default
 * Deprecate `RateLimiterFactory` autowiring aliases, use `RateLimiterFactoryInterface` instead
 * Allow configuring compound rate limiters
 * Make `ValidatorCacheWarmer` use `kernel.build_dir` instead of `cache_dir`
 * Make `SerializeCacheWarmer` use `kernel.build_dir` instead of `cache_dir`
 * Support executing custom workflow validators during container compilation

7.2
---

 * Add support for `--sort` option when extracting translations with `translation:extract` command and `--force` option
 * Add support for setting `headers` with `Symfony\Bundle\FrameworkBundle\Controller\TemplateController`
 * Add `--resolve-env-vars` option to `lint:container` command
 * Derivate `kernel.secret` from the decryption secret when its env var is not defined
 * Make the `config/` directory optional in `MicroKernelTrait`, add support for service arguments in the
   invokable Kernel class, and register `FrameworkBundle` by default when the `bundles.php` file is missing
 * [BC BREAK] The `secrets:decrypt-to-local` command terminates with a non-zero exit code when a secret could not be read
 * Deprecate making `cache.app` adapter taggable, use the `cache.app.taggable` adapter instead
 * Enable `json_decode_detailed_errors` in the default serializer context in debug mode by default when `seld/jsonlint` is installed
 * Register `Symfony\Component\Serializer\NameConverter\SnakeCaseToCamelCaseNameConverter` as a service named `serializer.name_converter.snake_case_to_camel_case` if available
 * Add `framework.csrf_protection.stateless_token_ids`, `.cookie_name`, and `.check_header` options to use stateless headers/cookies-based CSRF protection
 * Add `framework.form.csrf_protection.field_attr` option
 * Deprecate `session.sid_length` and `session.sid_bits_per_character` config options
 * Add the ability to use an existing service as a lock/semaphore resource
 * Add support for configuring multiple serializer instances via the configuration
 * Add support for `SYMFONY_TRUSTED_PROXIES`, `SYMFONY_TRUSTED_HEADERS`, `SYMFONY_TRUST_X_SENDFILE_TYPE_HEADER` and `SYMFONY_TRUSTED_HOSTS` env vars
 * Add `--no-fill` option to `translation:extract` command

7.1
---

 * 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`
 * Attach the workflow's configuration to the `workflow` tag
 * Add the `allowed_recipients` option for mailer to allow some users to receive
   emails even if `recipients` is defined.
 * Reset env vars when resetting the container

7.0
---

 * 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

6.4
---

 * Add `HttpClientAssertionsTrait`
 * Add `AbstractController::renderBlock()` and `renderBlockView()`
 * Remove call to `renderView()` in `AbstractController::render()`
 * 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

6.3
---

 * 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
 * Add `--show-aliases` option to `debug:router` command

6.2
---

 * 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()`

6.1
---

 * 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

6.0
---

 * 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`

5.4
---

 * 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.

5.3
---

 * 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

5.2.0
-----

 * 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.

5.1.0
-----
 * Removed `--no-backup` option from `translation:update` command (broken since `5.0.0`)
 * Added link to source for controllers registered as named services
 * Added link to source on controller on `router:match`/`debug:router` (when `framework.ide` is configured)
 * Added the `framework.router.default_uri` configuration option to configure the default `RequestContext`
 * Made `MicroKernelTrait::configureContainer()` compatible with `ContainerConfigurator`
 * Added a new `mailer.message_bus` option to configure or disable the message bus to use to send mails.
 * Added flex-compatible default implementation for `MicroKernelTrait::registerBundles()`
 * Deprecated passing a `RouteCollectionBuilder` to `MicroKernelTrait::configureRoutes()`, type-hint `RoutingConfigurator` instead
 * The `TemplateController` now accepts context argument
 * Deprecated *not* setting the "framework.router.utf8" configuration option as it will default to `true` in Symfony 6.0
 * Added tag `routing.expression_language_function` to define functions available in route conditions
 * Added `debug:container --deprecations` option to see compile-time deprecations.
 * Made `BrowserKitAssertionsTrait` report the original error message in case of a failure
 * Added ability for `config:dump-reference` and `debug:config` to dump and debug kernel container extension configuration.
 * Deprecated `session.attribute_bag` service and `session.flash_bag` service.

5.0.0
-----

 * 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.

4.4.0
-----

 * 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.
 * Moved `MailerAssertionsTrait` in `KernelTestCase`

4.3.0
-----

 * 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 under`framework.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.

4.2.0
-----

 * 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.

4.1.0
-----

 * 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 `ServiceLocator`s is now autoconfigured.
 * Add the ability to search a route in `debug:router`.
 * Add the ability to use SameSite cookies for sessions.

4.0.0
-----

 * 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

3.4.0
-----

 * 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`

3.3.0
-----

 * 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 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 tagged iterator arguments 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.
 * Deprecated `PhpStringTokenParser`, use
   `Symfony\Component\Translation\Extractor\PhpStringTokenParser` instead.
 * Deprecated `PhpExtractor`, use
   `Symfony\Component\Translation\Extractor\PhpExtractor` instead.

3.2.0
-----

 * 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`

3.1.0
-----

 * 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`
 * The `framework.serializer.cache` option and the service `serializer.mapping.cache.apc` have been
   deprecated. APCu should now be automatically used when available.

3.0.0
-----

 * removed `validator.api` parameter
 * removed `alias` option of the `form.type` tag

2.8.0
-----

 * Deprecated the `alias` option of the `form.type_extension` tag in favor of the
   `extended_type`/`extended-type` option
 * Deprecated the `alias` option of the `form.type` tag
 * Deprecated the Shell

2.7.0
-----

 * Added possibility to extract translation messages from a file or files besides extracting from a directory
 * Added `TranslationsCacheWarmer` to create catalogues at warmup

2.6.0
-----

 * 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

2.5.0
-----

 * 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.

2.4.0
-----

 * 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

2.3.0
-----

 * [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.

2.2.0
-----

 * added a new `uri_signer` service to help sign URIs
 * deprecated `Symfony\Bundle\FrameworkBundle\HttpKernel::render()` and `Symfony\Bundle\FrameworkBundle\HttpKernel::forward()`
 * deprecated the `Symfony\Bundle\FrameworkBundle\HttpKernel` class in favor of `Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel`
 * added support for adding new HTTP content rendering strategies (like ESI and Hinclude)
   in the DIC via the `kernel.fragment_renderer` tag
 * [BC BREAK] restricted the `Symfony\Bundle\FrameworkBundle\HttpKernel::render()` method to only accept URIs or ControllerReference instances
   * `Symfony\Bundle\FrameworkBundle\HttpKernel::render()` method signature changed and the first argument
     must now be a URI or a ControllerReference instance (the `generateInternalUri()` method was removed)
   * The internal routes (`Resources/config/routing/internal.xml`) have been removed and replaced with a listener (`Symfony\Component\HttpKernel\EventListener\FragmentListener`)
   * The `render` method of the `actions` templating helper signature and arguments changed
 * replaced Symfony\Bundle\FrameworkBundle\Controller\TraceableControllerResolver by Symfony\Component\HttpKernel\Controller\TraceableControllerResolver
 * replaced Symfony\Component\HttpKernel\Debug\ContainerAwareTraceableEventDispatcher by Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher
 * added Client::enableProfiler()
 * a new parameter has been added to the DIC: `router.request_context.base_url`
   You can customize it for your functional tests or for generating URLs with
   the right base URL when you are in the CLI context.
 * added support for default templates per render tag

2.1.0
-----

 * moved the translation files to the Form and Validator components
 * changed the default extension for XLIFF files from .xliff to .xlf
 * moved Symfony\Bundle\FrameworkBundle\ContainerAwareEventDispatcher to Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher
 * moved Symfony\Bundle\FrameworkBundle\Debug\TraceableEventDispatcher to Symfony\Component\EventDispatcher\ContainerAwareTraceableEventDispatcher
 * added a router:match command
 * added a config:dump-reference command
 * added a server:run command
 * added kernel.event_subscriber tag
 * added a way to create relative symlinks when running assets:install command (--relative option)
 * added Controller::getUser()
 * [BC BREAK] assets_base_urls and base_urls merging strategy has changed
 * changed the default profiler storage to use the filesystem instead of SQLite
 * added support for placeholders in route defaults and requirements (replaced
   by the value set in the service container)
 * added Filesystem component as a dependency
 * added support for hinclude (use ``standalone: 'js'`` in render tag)
 * session options: lifetime, path, domain, secure, httponly were deprecated.
   Prefixed versions should now be used instead: cookie_lifetime, cookie_path,
   cookie_domain, cookie_secure, cookie_httponly
 * [BC BREAK] following session options: 'lifetime', 'path', 'domain', 'secure',
   'httponly' are now prefixed with cookie_ when dumped to the container
 * Added `handler_id` configuration under `session` key to represent `session.handler`
   service, defaults to `session.handler.native_file`.
 * Added `gc_maxlifetime`, `gc_probability`, and `gc_divisor` to session
   configuration. This means session garbage collection has a
  `gc_probability`/`gc_divisor` chance of being run. The `gc_maxlifetime` defines
   how long a session can idle for. It is different from cookie lifetime which
   declares how long a cookie can be stored on the remote client.
 * Removed 'auto_start' configuration parameter from session config. The session will
   start on demand.
 * [BC BREAK] TemplateNameParser::parseFromFilename() has been moved to a dedicated
   parser: TemplateFilenameParser::parse().
 * [BC BREAK] Kernel parameters are replaced by their value wherever they appear
   in Route patterns, requirements and defaults. Use '%%' as the escaped value for '%'.
 * [BC BREAK] Switched behavior of flash messages to expire flash messages on retrieval
   using Symfony\Component\HttpFoundation\Session\Flash\FlashBag as opposed to on
   next pageload regardless of whether they are displayed or not.
