- Removed
Client
, useAbstractBrowser
instead - Removed the possibility to extend
Response
by making it final. - Removed
Response::buildHeader()
- Removed
Response::getStatus()
, useResponse::getStatusCode()
instead - The
Client::submit()
method has a new$serverParameters
argument.
- Removed
CacheItem::getPreviousTags()
, useCacheItem::getMetadata()
instead. - Removed all PSR-16 adapters, use
Psr16Cache
orSymfony\Contracts\Cache\CacheInterface
implementations instead. - Removed
SimpleCacheAdapter
, usePsr16Adapter
instead.
- Dropped support for constructing a
TreeBuilder
without passing root node information. - Added the
getChildNodeDefinitions()
method toParentNodeDefinitionInterface
. - The
Processor
class has been made final - Removed
FileLoaderLoadException
, useLoaderLoadException
instead. - 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
ClassMetadataFactory
inDoctrineExtractor
, an instance ofEntityManagerInterface
should be injected instead
- The
Crawler::children()
method has a new$selector
argument.
- The
TraceableEventDispatcherInterface
has been removed.
- The
Filesystem::dumpFile()
method no longer supports arrays in the$content
argument. - The
Filesystem::appendToFile()
method no longer supports arrays in the$content
argument.
- The
Finder::sortByName()
method has a new$useNaturalSort
argument.
-
Removed support for using the
format
option ofDateType
andDateTimeType
when thehtml5
option 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_widget
options of theDateTimeType
when thewidget
option is set tosingle_text
is 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
scale
option was removed from theIntegerType
. -
The
$scale
argument of theIntegerToLocalizedStringTransformer
was removed. -
Calling
FormRenderer::searchAndRenderBlock
for 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
regions
option was removed from theTimezoneType
.
-
The project dir argument of the constructor of
AssetsInstallCommand
is required. -
Removed support for
bundle:controller:action
syntax to reference controllers. UseserviceOrFqcn::method
instead whereserviceOrFqcn
is 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
RouterCacheWarmer
that does not implement theWarmableInterface
is not supported anymore. -
The
RequestDataCollector
class has been removed. Use theSymfony\Component\HttpKernel\DataCollector\RequestDataCollector
class instead. -
Removed
Symfony\Bundle\FrameworkBundle\Controller\Controller
. UseSymfony\Bundle\FrameworkBundle\Controller\AbstractController
instead. -
Added support for the SameSite attribute for session cookies. It is highly recommended to set this setting (
framework.session.cookie_samesite
) tolax
for increased security against CSRF attacks. -
The
ContainerAwareCommand
class has been removed, useSymfony\Component\Console\Command\Command
with 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:update
anddebug:translation
commands has been removed. -
Removed the "Psr\SimpleCache\CacheInterface" / "cache.app.simple" service, use "Symfony\Contracts\Cache\CacheInterface" / "cache.app" instead.
- The
$size
argument of theUploadedFile
constructor has been removed. - The
getClientSize()
method of theUploadedFile
class has been removed. - The
getSession()
method of theRequest
class 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
MimeTypeGuesserInterface
andExtensionGuesserInterface
interfaces have been removed, useSymfony\Component\Mime\MimeTypesInterface
instead. - The
MimeType
andMimeTypeExtensionGuesser
classes have been removed, useSymfony\Component\Mime\MimeTypes
instead. - The
FileBinaryMimeTypeGuesser
class has been removed, useSymfony\Component\Mime\FileBinaryMimeTypeGuesser
instead. - The
FileinfoMimeTypeGuesser
class has been removed, useSymfony\Component\Mime\FileinfoMimeTypeGuesser
instead.
- Removed
Client
, useHttpKernelBrowser
instead - The
Kernel::getRootDir()
and thekernel.root_dir
parameter have been removed - The
KernelInterface::getName()
and thekernel.name
parameter have been removed - Removed the first and second constructor argument of
ConfigDataCollector
- Removed
ConfigDataCollector::getApplicationName()
- Removed
ConfigDataCollector::getApplicationVersion()
- The methods
DebugProcessor::getLogs()
,DebugProcessor::countErrors()
,Logger::getLogs()
andLogger::countErrors()
have a new$request
argument.
-
Removed the
Process::setCommandline()
and thePhpProcess::setPhpBinary()
methods. -
Commands must be defined as arrays when creating a
Process
instance.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_class
router options have been removed. Route
andCompiledRoute
don't implementSerializable
anymore; if you serialize them, please ensure your unserialization logic can recover from a failure related to an updated serialization format
-
The
Role
andSwitchUserRole
classes have been removed. -
The
RoleHierarchyInterface
has been removed. -
The
getReachableRoles()
method of theRoleHierarchy
class 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\AdvancedUserInterface
has 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 aLogoutListener
instance ornull
. -
The
AuthenticationTrustResolver
constructor arguments have been removed. -
A user object that is not an instance of
UserInterface
cannot be accessed fromSecurity::getUser()
anymore and returnsnull
instead. -
SimpleAuthenticatorInterface
,SimpleFormAuthenticatorInterface
,SimplePreAuthenticatorInterface
,SimpleAuthenticationProvider
,SimpleAuthenticationHandler
,SimpleFormAuthenticationListener
andSimplePreAuthenticationListener
have been removed. Use Guard instead. -
\Serializable
interface has been removed fromAbstractToken
andAuthenticationException
, 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_change
firewall option has been removed. - The
switch_user.stateless
firewall option has been removed. - The
SecurityUserValueResolver
class has been removed. - Passing a
FirewallConfig
instance as 3rd argument to theFirewallContext
constructor now throws a\TypeError
, pass aLogoutListener
instance instead. - The
security.authentication.trust_resolver.anonymous_class
parameter has been removed. - The
security.authentication.trust_resolver.rememberme_class
parameter has been removed. - The
simple_form
andsimple_preauth
authentication listeners have been removed, use Guard instead. - The
SimpleFormFactory
andSimplePreAuthenticationFactory
classes have been removed, use Guard instead. - The names of the cookies configured in the
logout.delete_cookies
option are no longer normalized. If any of your cookie names has dashes they won't be changed to underscores. Before:my-cookie
deleted themy_cookie
cookie (with an underscore). After:my-cookie
deletes themy-cookie
cookie (with a dash).
- The
AbstractNormalizer::handleCircularReference()
method has two new$format
and$context
arguments.
- The
FileDumper::setBackup()
method has been removed. - The
TranslationWriter::disableBackup()
method has been removed. - The
TranslatorInterface
has been removed in favor ofSymfony\Contracts\Translation\TranslatorInterface
- The
MessageSelector
,Interval
andPluralizationRules
classes have been removed, useIdentityTranslator
instead - 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_variables
configuration option has been changed to%kernel.debug%
. - The
transchoice
tag and filter have been removed, use thetrans
ones instead with a%count%
parameter. - Removed support for legacy templates directories
src/Resources/views/
andsrc/Resources/<BundleName>/views/
, usetemplates/
andtemplates/bundles/<BundleName>/
instead.
- The
checkMX
andcheckHost
options of theEmail
constraint 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
checkDNS
anddnsMessage
options from theUrl
constraint. - The component is now decoupled from
symfony/translation
and usesSymfony\Contracts\Translation\TranslatorInterface
instead - The
ValidatorBuilderInterface
has been removed andValidatorBuilder
is now final - Removed support for validating instances of
\DateTimeInterface
inDateTimeValidator
,DateValidator
andTimeValidator
. UseType
instead or remove the constraint if the underlying model is type hinted to\DateTimeInterface
already. - The
symfony/intl
component is now required for using theBic
,Country
,Currency
,Language
andLocale
constraints - The
egulias/email-validator
component is now required for using theEmail
constraint in strict mode - The
symfony/expression-language
component is now required for using theExpression
constraint
- The
DefinitionBuilder::reset()
method has been removed, use theclear()
one instead. add
method has been removed useaddWorkflow
method inWorkflow\Registry
instead.SupportStrategyInterface
has been removed, useWorkflowSupportStrategyInterface
instead.ClassInstanceSupportStrategy
has been removed, useInstanceOfSupportStrategy
instead.MarkingStoreInterface::setMarking()
has a third argument:array $context = []
.
- The parser is now stricter and will throw a
ParseException
when a mapping is found inside a multi-line string.