- 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
root()method inTreeBuilder, pass the root node information to the constructor instead
-
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. -
Removed support for non-string default env() parameters
Before:
parameters: env(NAME): 1.5
After:
parameters: env(NAME): '1.5'
- Deprecated injecting
ClassMetadataFactoryinDoctrineExtractor, an instance ofEntityManagerInterfaceshould be injected instead - Passing an
IdReaderto theDoctrineChoiceLoaderwhen the query cannot be optimized with single id field will throw an exception, passnullinstead - Not passing an
IdReaderto theDoctrineChoiceLoaderwhen the query can be optimized with single id field will throw an exception
- The
Crawler::children()method has a new$selectorargument.
- First parameter
$usePutenvofDotenv::__construct()now default tofalse.
- The
TraceableEventDispatcherInterfacehas been removed. - The signature of the
EventDispatcherInterface::dispatch()method has been updated todispatch($event, string $eventName = null) - The
Eventclass has been removed, useSymfony\Contracts\EventDispatcher\Eventinstead
- 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 - Removed
TranslatorListenerin favor ofLocaleAwareListener
- Removed
ResourceBundlenamespace - Removed
Intl::getLanguageBundle(), useLanguagesorScriptsinstead - Removed
Intl::getCurrencyBundle(), useCurrenciesinstead - Removed
Intl::getLocaleBundle(), useLocalesinstead - Removed
Intl::getRegionBundle(), useCountriesinstead
- 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
getReachableRoles()method of theRoleHierarchyclass has been removed. It has been replaced by the newgetReachableRoleNames()method. -
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. Use__serialize()and__unserialize()instead.Before:
public function serialize() { return [$this->myLocalVar, parent::serialize()]; } public function unserialize($serialized) { [$this->myLocalVar, $parentSerialized] = unserialize($serialized); parent::unserialize($parentSerialized); }
After:
public function __serialize(): array { return [$this->myLocalVar, parent::__serialize()]; } public function __unserialize(array $data): void { [$this->myLocalVar, $parentData] = $data; parent::__unserialize($parentData); }
-
The
Argon2iPasswordEncoderclass has been removed, useSodiumPasswordEncoderinstead. -
The
BCryptPasswordEncoderclass has been removed, useNativePasswordEncoderinstead. -
Classes implementing the
TokenInterfacemust implement the two new methods__serializeand__unserialize
- 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). - Configuring encoders using
argon2iorbcryptas algorithm is not supported anymore, useautoinstead.
- 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.
- removed the
$requestStackand$requestContextarguments of theHttpFoundationExtension, pass aSymfony\Component\HttpFoundation\UrlHelperinstance as the only argument 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 = []. -
Removed support of
initial_place. Useinitial_placesinstead. -
MultipleStateMarkingStorehas been removed. UseMethodMarkingStoreinstead.Before:
framework: workflows: type: workflow article: marking_store: type: multiple arguments: states
After:
framework: workflows: type: workflow article: marking_store: property: states
-
SingleStateMarkingStorehas been removed. UseMethodMarkingStoreinstead.Before:
framework: workflows: article: marking_store: arguments: state
After:
framework: workflows: article: marking_store: property: state
-
Support for using a workflow with a single state marking is dropped. Use a state machine instead.
Before:
framework: workflows: article: type: workflow marking_store: type: single_state
After:
framework: workflows: article: type: state_machine
- The parser is now stricter and will throw a
ParseExceptionwhen a mapping is found inside a multi-line string.