- Removed
Client, useAbstractBrowserinstead - Removed the possibility to extend
Responseby making it final. - Removed
Response::buildHeader() - Removed
Response::getStatus(), useResponse::getStatusCode()instead - The
Client::submit()method has a new$serverParametersargument.
- Removed
CacheItem::getPreviousTags(), useCacheItem::getMetadata()instead. - Removed all PSR-16 adapters, use
Psr16CacheorSymfony\Contracts\Cache\CacheInterfaceimplementations instead. - Removed
SimpleCacheAdapter, usePsr16Adapterinstead.
- Dropped support for constructing a
TreeBuilderwithout passing root node information. - Added the
getChildNodeDefinitions()method toParentNodeDefinitionInterface. - The
Processorclass has been made final - Removed
FileLoaderLoadException, useLoaderLoadExceptioninstead. - Using environment variables with
cannotBeEmpty()if the value is validated withvalidate()will throw an exception.
-
Removed the
setCrossingChar()method in favor of thesetDefaultCrossingChar()method inTableStyle. -
Removed the
setHorizontalBorderChar()method in favor of thesetDefaultCrossingChars()method inTableStyle. -
Removed the
getHorizontalBorderChar()method in favor of thegetBorderChars()method inTableStyle. -
Removed the
setVerticalBorderChar()method in favor of thesetVerticalBorderChars()method inTableStyle. -
Removed the
getVerticalBorderChar()method in favor of thegetBorderChars()method inTableStyle. -
The
ProcessHelper::run()method takes the command as an array of arguments.Before:
$processHelper->run($output, 'ls -l');
After:
$processHelper->run($output, array('ls', '-l')); // alternatively, when a shell wrapper is required $processHelper->run($output, Process::fromShellCommandline('ls -l'));
- Removed the
TypedReference::canBeAutoregistered()andTypedReference::getRequiringClass()methods. - Removed support for auto-discovered extension configuration class which does not implement
ConfigurationInterface.
- Deprecated injecting
ClassMetadataFactoryinDoctrineExtractor, an instance ofEntityManagerInterfaceshould be injected instead
- The
Crawler::children()method has a new$selectorargument.
- The
TraceableEventDispatcherInterfacehas been removed. - The signature of the
EventDispatcherInterface::dispatch()method has been updated todispatch($event, string $eventName = null)
- The
Filesystem::dumpFile()method no longer supports arrays in the$contentargument. - The
Filesystem::appendToFile()method no longer supports arrays in the$contentargument.
- The
Finder::sortByName()method has a new$useNaturalSortargument.
-
Removed support for using the
formatoption ofDateTypeandDateTimeTypewhen thehtml5option is enabled. -
Using names for buttons that do not start with a letter, a digit, or an underscore leads to an exception.
-
Using names for buttons that do not contain only letters, digits, underscores, hyphens, and colons leads to an exception.
-
Using the
date_format,date_widget, andtime_widgetoptions of theDateTimeTypewhen thewidgetoption is set tosingle_textis not supported anymore. -
The
getExtendedType()method was removed from theFormTypeExtensionInterface. It is replaced by the the staticgetExtendedTypes()method which must return an iterable of extended types.Before:
class FooTypeExtension extends AbstractTypeExtension { public function getExtendedType() { return FormType::class; } // ... }
After:
class FooTypeExtension extends AbstractTypeExtension { public static function getExtendedTypes(): iterable { return array(FormType::class); } // ... }
-
The
scaleoption was removed from theIntegerType. -
The
$scaleargument of theIntegerToLocalizedStringTransformerwas removed. -
Calling
FormRenderer::searchAndRenderBlockfor fields which were already rendered throws an exception instead of returning empty strings:Before:
{% for field in fieldsWithPotentialDuplicates %} {{ form_widget(field) }} {% endfor %}After:
{% for field in fieldsWithPotentialDuplicates if not field.rendered %} {{ form_widget(field) }} {% endfor %} -
The
regionsoption was removed from theTimezoneType.
-
The project dir argument of the constructor of
AssetsInstallCommandis required. -
Removed support for
bundle:controller:actionsyntax to reference controllers. UseserviceOrFqcn::methodinstead whereserviceOrFqcnis either the service ID when using controllers as services or the FQCN of the controller.Before:
bundle_controller: path: / defaults: _controller: FrameworkBundle:Redirect:redirect
After:
bundle_controller: path: / defaults: _controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction
-
Removed
Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser. -
Warming up a router in
RouterCacheWarmerthat does not implement theWarmableInterfaceis not supported anymore. -
The
RequestDataCollectorclass has been removed. Use theSymfony\Component\HttpKernel\DataCollector\RequestDataCollectorclass instead. -
Removed
Symfony\Bundle\FrameworkBundle\Controller\Controller. UseSymfony\Bundle\FrameworkBundle\Controller\AbstractControllerinstead. -
Added support for the SameSite attribute for session cookies. It is highly recommended to set this setting (
framework.session.cookie_samesite) tolaxfor increased security against CSRF attacks. -
The
ContainerAwareCommandclass has been removed, useSymfony\Component\Console\Command\Commandwith dependency injection instead. -
The
Templating\Helper\TranslatorHelper::transChoice()method has been removed, use thetrans()one instead with a%count%parameter. -
Removed support for legacy translations directories
src/Resources/translations/andsrc/Resources/<BundleName>/translations/, usetranslations/instead. -
Support for the legacy directory structure in
translation:updateanddebug:translationcommands has been removed. -
Removed the "Psr\SimpleCache\CacheInterface" / "cache.app.simple" service, use "Symfony\Contracts\Cache\CacheInterface" / "cache.app" instead.
- The
$sizeargument of theUploadedFileconstructor has been removed. - The
getClientSize()method of theUploadedFileclass has been removed. - The
getSession()method of theRequestclass throws an exception when session is null. - The default value of the "$secure" and "$samesite" arguments of Cookie's constructor changed respectively from "false" to "null" and from "null" to "lax".
- The
MimeTypeGuesserInterfaceandExtensionGuesserInterfaceinterfaces have been removed, useSymfony\Component\Mime\MimeTypesInterfaceinstead. - The
MimeTypeandMimeTypeExtensionGuesserclasses have been removed, useSymfony\Component\Mime\MimeTypesinstead. - The
FileBinaryMimeTypeGuesserclass has been removed, useSymfony\Component\Mime\FileBinaryMimeTypeGuesserinstead. - The
FileinfoMimeTypeGuesserclass has been removed, useSymfony\Component\Mime\FileinfoMimeTypeGuesserinstead.
- Removed
Client, useHttpKernelBrowserinstead - The
Kernel::getRootDir()and thekernel.root_dirparameter have been removed - The
KernelInterface::getName()and thekernel.nameparameter have been removed - Removed the first and second constructor argument of
ConfigDataCollector - Removed
ConfigDataCollector::getApplicationName() - Removed
ConfigDataCollector::getApplicationVersion() - Removed
FilterControllerArgumentsEvent, useControllerArgumentsEventinstead - Removed
FilterControllerEvent, useControllerEventinstead - Removed
FilterResponseEvent, useResponseEventinstead - Removed
GetResponseEvent, useRequestEventinstead - Removed
GetResponseForControllerResultEvent, useViewEventinstead - Removed
GetResponseForExceptionEvent, useExceptionEventinstead - Removed
PostResponseEvent, useTerminateEventinstead
- The
LoggingMiddlewareclass has been removed, pass a logger toSendMessageMiddlewareinstead.
- The methods
DebugProcessor::getLogs(),DebugProcessor::countErrors(),Logger::getLogs()andLogger::countErrors()have a new$requestargument.
-
Removed the
Process::setCommandline()and thePhpProcess::setPhpBinary()methods. -
Commands must be defined as arrays when creating a
Processinstance.Before:
$process = new Process('ls -l');
After:
$process = new Process(array('ls', '-l')); // alternatively, when a shell wrapper is required $process = Process::fromShellCommandline('ls -l');
- The
generator_base_class,generator_cache_class,matcher_base_class, andmatcher_cache_classrouter options have been removed. RouteandCompiledRoutedon't implementSerializableanymore; if you serialize them, please ensure your unserialization logic can recover from a failure related to an updated serialization format
-
The
RoleandSwitchUserRoleclasses have been removed. -
The
RoleHierarchyInterfacehas been removed. -
The
getReachableRoles()method of theRoleHierarchyclass has been removed. -
The
getRoles()method has been removed from theTokenInterface. It has been replaced by the newgetRoleNames()method. -
The
ContextListener::setLogoutOnUserChange()method has been removed. -
The
Symfony\Component\Security\Core\User\AdvancedUserInterfacehas been removed. -
The
ExpressionVoter::addExpressionLanguageProvider()method has been removed. -
The
FirewallMapInterface::getListeners()method must return an array of 3 elements, the 3rd one must be either aLogoutListenerinstance ornull. -
The
AuthenticationTrustResolverconstructor arguments have been removed. -
A user object that is not an instance of
UserInterfacecannot be accessed fromSecurity::getUser()anymore and returnsnullinstead. -
SimpleAuthenticatorInterface,SimpleFormAuthenticatorInterface,SimplePreAuthenticatorInterface,SimpleAuthenticationProvider,SimpleAuthenticationHandler,SimpleFormAuthenticationListenerandSimplePreAuthenticationListenerhave been removed. Use Guard instead. -
The
ListenerInterfacehas been removed, turn your listeners into callables instead. -
The
Firewall::handleRequest()method has been removed, useFirewall::callListeners()instead. -
\Serializableinterface has been removed fromAbstractTokenandAuthenticationException, thusserialize()andunserialize()aren't available. UsegetState()andsetState()instead.Before:
public function serialize() { return [$this->myLocalVar, parent::serialize()]; } public function unserialize($serialized) { [$this->myLocalVar, $parentSerialized] = unserialize($serialized); parent::unserialize($parentSerialized); }
After:
protected function getState(): array { return [$this->myLocalVar, parent::getState()]; } protected function setState(array $data) { [$this->myLocalVar, $parentData] = $data; parent::setState($parentData); }
- The
logout_on_user_changefirewall option has been removed. - The
switch_user.statelessfirewall option has been removed. - The
SecurityUserValueResolverclass has been removed. - Passing a
FirewallConfiginstance as 3rd argument to theFirewallContextconstructor now throws a\TypeError, pass aLogoutListenerinstance instead. - The
security.authentication.trust_resolver.anonymous_classparameter has been removed. - The
security.authentication.trust_resolver.rememberme_classparameter has been removed. - The
simple_formandsimple_preauthauthentication listeners have been removed, use Guard instead. - The
SimpleFormFactoryandSimplePreAuthenticationFactoryclasses have been removed, use Guard instead. - The names of the cookies configured in the
logout.delete_cookiesoption are no longer normalized. If any of your cookie names has dashes they won't be changed to underscores. Before:my-cookiedeleted themy_cookiecookie (with an underscore). After:my-cookiedeletes themy-cookiecookie (with a dash).
- The
AbstractNormalizer::handleCircularReference()method has two new$formatand$contextarguments.
- The
FileDumper::setBackup()method has been removed. - The
TranslationWriter::disableBackup()method has been removed. - The
TranslatorInterfacehas been removed in favor ofSymfony\Contracts\Translation\TranslatorInterface - The
MessageSelector,IntervalandPluralizationRulesclasses have been removed, useIdentityTranslatorinstead - The
Translator::getFallbackLocales()andTranslationDataCollector::getFallbackLocales()method are now internal - The
Translator::transChoice()method has been removed in favor of usingTranslator::trans()with "%count%" as the parameter driving plurals
- The default value (
false) of thetwig.strict_variablesconfiguration option has been changed to%kernel.debug%. - The
transchoicetag and filter have been removed, use thetransones instead with a%count%parameter. - Removed support for legacy templates directories
src/Resources/views/andsrc/Resources/<BundleName>/views/, usetemplates/andtemplates/bundles/<BundleName>/instead.
- The
checkMXandcheckHostoptions of theEmailconstraint were removed - The
Email::__construct()'strict' property has been removed. Use 'mode'=>"strict" instead. - Calling
EmailValidator::__construct()method with a boolean parameter has been removed, useEmailValidator("strict")instead. - Removed the
checkDNSanddnsMessageoptions from theUrlconstraint. - The component is now decoupled from
symfony/translationand usesSymfony\Contracts\Translation\TranslatorInterfaceinstead - The
ValidatorBuilderInterfacehas been removed andValidatorBuilderis now final - Removed support for validating instances of
\DateTimeInterfaceinDateTimeValidator,DateValidatorandTimeValidator. UseTypeinstead or remove the constraint if the underlying model is type hinted to\DateTimeInterfacealready. - The
symfony/intlcomponent is now required for using theBic,Country,Currency,LanguageandLocaleconstraints - The
egulias/email-validatorcomponent is now required for using theEmailconstraint in strict mode - The
symfony/expression-languagecomponent is now required for using theExpressionconstraint
- The
DefinitionBuilder::reset()method has been removed, use theclear()one instead. addmethod has been removed useaddWorkflowmethod inWorkflow\Registryinstead.SupportStrategyInterfacehas been removed, useWorkflowSupportStrategyInterfaceinstead.ClassInstanceSupportStrategyhas been removed, useInstanceOfSupportStrategyinstead.MarkingStoreInterface::setMarking()has a third argument:array $context = [].
- The parser is now stricter and will throw a
ParseExceptionwhen a mapping is found inside a multi-line string.