- Add method
isKernelTerminating()
toExceptionEvent
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 - Add
NearMissValueResolverException
to let value resolvers report when an argument could be under their watch but failed to be resolved - Add
$type
argument to#[MapRequestPayload]
that allows mapping a list of items - The
Extension
class is marked as internal, extend theExtension
class from the DependencyInjection component instead - Deprecate
Extension::addAnnotatedClassesToCompile()
- Deprecate
AddAnnotatedClassesToCachePass
- Deprecate the
setAnnotatedClassCache()
andgetAnnotatedClassesToCompile()
methods of theKernel
class - Add
#[MapUploadedFile]
attribute to fetch, validate, and inject uploaded files into controller arguments
- Add argument
$reflector
toArgumentResolverInterface::getArguments()
andArgumentMetadataFactoryInterface::createArgumentMetadata()
- Remove
ArgumentValueResolverInterface
, useValueResolverInterface
instead - Remove
StreamedResponseListener
- Remove
AbstractSurrogate::$phpEscapeMap
- Remove
HttpKernelInterface::MASTER_REQUEST
- Remove
terminate_on_cache_hit
option fromHttpCache
- Require explicit argument when calling
ConfigDataCollector::setKernel()
,RouterListener::setCurrentRequest()
- Remove
Kernel::stripComments()
- Remove
FileLinkFormatter
, useFileLinkFormatter
from the ErrorHandler component instead - Remove
UriSigner
, useUriSigner
from the HttpFoundation component instead - Add argument
$buildDir
toWarmableInterface
- Add argument
$filter
toProfiler::find()
andFileProfilerStorage::find()
- Support backed enums in #[MapQueryParameter]
BundleInterface
no longer extendsContainerAwareInterface
- Add optional
$className
parameter toControllerEvent::getAttributes()
- Add native return types to
TraceableEventDispatcher
and toMergeExtensionConfigurationPass
- Add argument
$validationFailedStatusCode
to#[MapQueryString]
and#[MapRequestPayload]
- Add argument
$debug
toLogger
- Add class
DebugLoggerConfigurator
- Add parameters
kernel.runtime_mode
andkernel.runtime_mode.*
, all set from env varAPP_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
, useUriSigner
from the HttpFoundation component instead - Deprecate
FileLinkFormatter
, useFileLinkFormatter
from the ErrorHandler component instead - Add argument
$buildDir
toWarmableInterface
- Add argument
$filter
toProfiler::find()
andFileProfilerStorage::find()
- Add
ControllerResolver::allowControllers()
to define which callables are legit controllers when the_check_controller_is_allowed
request attribute is set
- Deprecate parameters
container.dumper.inline_factories
andcontainer.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 inDateTimeValueResolver
- Add
#[WithLogLevel]
for defining log levels for exceptions - Add
skip_response_headers
to theHttpCache
options - Introduce targeted value resolvers with
#[ValueResolver]
and#[AsTargetedValueResolver]
- Add
#[MapRequestPayload]
to map and validate request payload fromRequest::getContent()
orRequest::$request->all()
to typed objects - Add
#[MapQueryString]
to map and validate request query string fromRequest::$query->all()
to typed objects - Add
#[MapQueryParameter]
to map and validate individual query parameters to controller arguments - Collect data from every event dispatcher
- Add constructor argument
bool $handleAllThrowable
toHttpKernel
- 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 deprecateArgumentValueResolverInterface
- Add argument
$reflector
toArgumentResolverInterface
andArgumentMetadataFactoryInterface
- Deprecate calling
ConfigDataCollector::setKernel()
,RouterListener::setCurrentRequest()
without arguments
- 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 whenAbstractBundle
is used
- Remove
ArgumentInterface
- Remove
ArgumentMetadata::getAttribute()
, usegetAttributes()
instead - Remove support for returning a
ContainerBuilder
fromKernelInterface::registerContainerConfiguration()
- Remove
KernelEvent::isMasterRequest()
, useisMainRequest()
instead - Remove support for
service:action
syntax to reference controllers, useserviceOrFqcn::method
instead
- Add the ability to enable the profiler using a request query parameter, body parameter or attribute
- Deprecate
AbstractTestSessionListener
andTestSessionListener
, useAbstractSessionListener
andSessionListener
instead - Deprecate the
fileLinkFormat
parameter ofDebugHandlersListener
- 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
- Deprecate
ArgumentInterface
- Add
ArgumentMetadata::getAttributes()
- Deprecate
ArgumentMetadata::getAttribute()
, usegetAttributes()
instead - Mark the class
Symfony\Component\HttpKernel\EventListener\DebugHandlersListener
as internal - Deprecate returning a
ContainerBuilder
fromKernelInterface::registerContainerConfiguration()
- Deprecate
HttpKernelInterface::MASTER_REQUEST
and addHttpKernelInterface::MAIN_REQUEST
as replacement - Deprecate
KernelEvent::isMasterRequest()
and addisMainRequest()
as replacement - Add
#[AsController]
attribute for declaring standalone controllers on PHP 8 - Add
FragmentUriGeneratorInterface
andFragmentUriGenerator
to generate the URI of a fragment
- 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
andkernel.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 usingHttpKernelBrowser
- 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, useserviceOrFqcn::method
instead - allowed using public aliases to reference controllers
- added session usage reporting when the
_stateless
attribute of the request is set totrue
- added
AbstractSessionListener::onSessionUsage()
to report when the session is used while a request is stateless
- 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
inHIncludeFragmentRenderer
, use aTwig\Environment
only - removed
TranslatorListener
in favor ofLocaleAwareListener
- removed
getRootDir()
andgetName()
fromKernel
andKernelInterface
- removed
FilterControllerArgumentsEvent
, useControllerArgumentsEvent
instead - removed
FilterControllerEvent
, useControllerEvent
instead - removed
FilterResponseEvent
, useResponseEvent
instead - removed
GetResponseEvent
, useRequestEvent
instead - removed
GetResponseForControllerResultEvent
, useViewEvent
instead - removed
GetResponseForExceptionEvent
, useExceptionEvent
instead - removed
PostResponseEvent
, useTerminateEvent
instead - removed
SaveSessionListener
in favor ofAbstractSessionListener
- removed
Client
, useHttpKernelBrowser
instead - added method
getProjectDir()
toKernelInterface
- removed methods
serialize
andunserialize
fromDataCollector
, 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
, useErrorListener
instead
- The
DebugHandlersListener
class has been marked asfinal
- 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
andTimeDataCollector
classes as@final
. - Marked the
RouterDataCollector::collect()
method as@final
. - The
DataCollectorInterface::collect()
andProfiler::collect()
methods third parameter signature will be\Throwable $exception = null
instead of\Exception $exception = null
in Symfony 5.0. - Deprecated methods
ExceptionEvent::get/setException()
, useget/setThrowable()
instead - Deprecated class
ExceptionListener
, useErrorListener
instead
- renamed
Client
toHttpKernelBrowser
KernelInterface
doesn't extendSerializable
anymore- deprecated the
Kernel::serialize()
andunserialize()
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 ofLocaleAwareListener
- added the registration of all
LocaleAwareInterface
implementations into theLocaleAwareListener
- made
FileLinkFormatter
final and not implementSerializable
anymore - the base
DataCollector
doesn't implementSerializable
anymore, you should store all the serialized state in the data property instead DumpDataCollector
has been marked asfinal
- added an event listener to prevent search engines from indexing applications in debug mode.
- renamed
FilterControllerArgumentsEvent
toControllerArgumentsEvent
- renamed
FilterControllerEvent
toControllerEvent
- renamed
FilterResponseEvent
toResponseEvent
- renamed
GetResponseEvent
toRequestEvent
- renamed
GetResponseForControllerResultEvent
toViewEvent
- renamed
GetResponseForExceptionEvent
toExceptionEvent
- renamed
PostResponseEvent
toTerminateEvent
- added
HttpClientKernel
for handling requests with anHttpClientInterface
instance - added
trace_header
andtrace_level
configuration options toHttpCache
- deprecated
KernelInterface::getRootDir()
and thekernel.root_dir
parameter - deprecated
KernelInterface::getName()
and thekernel.name
parameter - deprecated the first and second constructor argument of
ConfigDataCollector
- deprecated
ConfigDataCollector::getApplicationName()
- deprecated
ConfigDataCollector::getApplicationVersion()
- added orphaned events support to
EventDataCollector
ExceptionListener
now logs exceptions at priority0
(previously logged at-128
)- Added support for using
service::method
to reference controllers, making it consistent with other cases. It is recommended over theservice: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
- removed the
DataCollector::varToString()
method, useDataCollector::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 thedebug.controller_resolver
- removed
LazyLoadingFragmentHandler::addRendererService()
- removed
Psr6CacheClearer::addPool()
- removed
Extension::addClassesToCompile()
andExtension::getClassesToCompile()
- removed
Kernel::loadClassCache()
,Kernel::doLoadClassCache()
,Kernel::setClassCache()
, andKernel::getEnvParameters()
- support for the
X-Status-Code
when handling exceptions in theHttpKernel
has been dropped, use theHttpKernel::allowCustomResponseCode()
method instead - removed convention-based commands registration
- removed the
ChainCacheClearer::add()
method - removed the
CacheaWarmerAggregate::add()
andsetWarmers()
methods - made
CacheWarmerAggregate
andChainCacheClearer
classes final
- added a minimalist PSR-3
Logger
class that writes instderr
- made kernels implementing
CompilerPassInterface
able to process the container - deprecated bundle inheritance
- added
RebootableInterface
and implemented it inKernel
- deprecated commands auto registration
- deprecated
EnvParametersResource
- added
Symfony\Component\HttpKernel\Client::catchExceptions()
- deprecated the
ChainCacheClearer::add()
method - deprecated the
CacheaWarmerAggregate::add()
andsetWarmers()
methods - made
CacheWarmerAggregate
andChainCacheClearer
classes final - added the possibility to reset the profiler to its initial state
- deprecated data collectors without a
reset()
method - deprecated implementing
DebugLoggerInterface
without aclear()
method
- added
kernel.project_dir
andKernel::getProjectDir()
- deprecated
kernel.root_dir
andKernel::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()
andExtension::getClassesToCompile()
- deprecated
Psr6CacheClearer::addPool()
- deprecated
DataCollector::varToString()
, usecloneVar()
instead - changed surrogate capability name in
AbstractSurrogate::addSurrogateCapability
to 'symfony' - Added
ControllerArgumentValueResolverPass
- deprecated passing objects as URI attributes to the ESI and SSI renderers
- deprecated
ControllerResolver::getArguments()
- added
Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface
- added
Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface
as argument toHttpKernel
- added
Symfony\Component\HttpKernel\Controller\ArgumentResolver
- added
Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::getMethod()
- added
Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::getRedirect()
- added the
kernel.controller_arguments
event, triggered after controller arguments have been resolved
- removed
Symfony\Component\HttpKernel\Kernel::init()
- removed
Symfony\Component\HttpKernel\Kernel::isClassInActiveBundle()
andSymfony\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()
- deprecated
Profiler::import
andProfiler::export
- added the HTTP status code to profiles
- deprecated
Symfony\Component\HttpKernel\EventListener\ErrorsLoggerListener
, useSymfony\Component\HttpKernel\EventListener\DebugHandlersListener
instead - deprecated unused method
Symfony\Component\HttpKernel\Kernel::isClassInActiveBundle
andSymfony\Component\HttpKernel\KernelInterface::isClassInActiveBundle
- deprecated
Symfony\Component\HttpKernel\DependencyInjection\RegisterListenersPass
, useSymfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass
instead
- added event listeners for the session
- added the KernelEvents::FINISH_REQUEST event
- [BC BREAK] renamed
Symfony\Component\HttpKernel\EventListener\DeprecationLoggerListener
toSymfony\Component\HttpKernel\EventListener\ErrorsLoggerListener
and changed its constructor - deprecated
Symfony\Component\HttpKernel\Debug\ErrorHandler
,Symfony\Component\HttpKernel\Debug\ExceptionHandler
,Symfony\Component\HttpKernel\Exception\FatalErrorException
andSymfony\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
- [BC BREAK] the path info for sub-request is now always _fragment (or whatever you configured instead of the default)
- added Symfony\Component\HttpKernel\EventListener\FragmentListener
- added Symfony\Component\HttpKernel\UriSigner
- added Symfony\Component\HttpKernel\FragmentRenderer and rendering strategies (in Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface)
- added Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel
- added ControllerReference to create reference of Controllers (used in the FragmentRenderer class)
- [BC BREAK] renamed TimeDataCollector::getTotalTime() to TimeDataCollector::getDuration()
- updated the MemoryDataCollector to include the memory used in the kernel.terminate event listeners
- moved the Stopwatch classes to a new component
- added TraceableControllerResolver
- added TraceableEventDispatcher (removed ContainerAwareTraceableEventDispatcher)
- added support for WinCache opcode cache in ConfigDataCollector
- [BC BREAK] the charset is now configured via the Kernel::getCharset() method
- [BC BREAK] the current locale for the user is not stored anymore in the session
- added the HTTP method to the profiler storage
- updated all listeners to implement EventSubscriberInterface
- added TimeDataCollector
- added ContainerAwareTraceableEventDispatcher
- moved TraceableEventDispatcherInterface to the EventDispatcher component
- added RouterListener, LocaleListener, and StreamedResponseListener
- added CacheClearerInterface (and ChainCacheClearer)
- added a kernel.terminate event (via TerminableInterface and PostResponseEvent)
- added a Stopwatch class
- added WarmableInterface
- improved extensibility between bundles
- added profiler storages for Memcache(d), File-based, MongoDB, Redis
- moved Filesystem class to its own component