- The component has been removed. Use Composer instead.
-
Setting unknown style options is not supported anymore and throws an exception.
-
The
QuestionHelper::setInputStream()method is removed. UseStreamableInputInterface::setStream()orCommandTester::setInputs()instead.Before:
$input = new ArrayInput(); $questionHelper->setInputStream($stream); $questionHelper->ask($input, $output, $question);
After:
$input = new ArrayInput(); $input->setStream($stream); $questionHelper->ask($input, $output, $question);
Before:
$commandTester = new CommandTester($command); $stream = fopen('php://memory', 'r+', false); fputs($stream, "AppBundle\nYes"); rewind($stream); $command->getHelper('question')->setInputStream($stream); $commandTester->execute();
After:
$commandTester = new CommandTester($command); $commandTester->setInputs(array('AppBundle', 'Yes')); $commandTester->execute();
-
The
console.exceptionevent and the relatedConsoleExceptionEventclass have been removed in favor of theconsole.errorevent and theConsoleErrorEventclass.
-
The
ContextErrorExceptionclass has been removed. Use\ErrorExceptioninstead. -
FlattenException::getTrace()now returns additional type descriptionsintegerandfloat.
-
Autowiring services based on the types they implement is not supported anymore. Rename (or alias) your services to their FQCN id to make them autowirable.
-
_defaultsand_instanceofare now reserved service names in Yaml configurations. Please rename any services with that names. -
Non-numeric keys in methods and constructors arguments have never been supported and are now forbidden. Please remove them if you happen to have one.
-
Service names that start with an underscore are now reserved in Yaml files. Please rename any services with such names.
-
Autowiring-types have been removed, use aliases instead.
Before:
<service id="annotations.reader" class="Doctrine\Common\Annotations\AnnotationReader" public="false"> <autowiring-type>Doctrine\Common\Annotations\Reader</autowiring-type> </service>
After:
<service id="annotations.reader" class="Doctrine\Common\Annotations\AnnotationReader" public="false" /> <service id="Doctrine\Common\Annotations\Reader" alias="annotations.reader" public="false" />
-
Service identifiers are now case sensitive.
-
The
ReferenceandAliasclasses do not make service identifiers lowercase anymore. -
Using the
PhpDumperwith an uncompiledContainerBuilderis not supported anymore. -
Extending the containers generated by
PhpDumperis not supported anymore. -
The
DefinitionDecoratorclass has been removed. Use theChildDefinitionclass instead. -
Using unsupported configuration keys in YAML configuration files raises an exception.
-
Using unsupported options to configure service aliases raises an exception.
-
Setting or unsetting a private service with the
Container::set()method is no longer supported. Only public services can be set or unset. -
Checking the existence of a private service with the
Container::has()method is no longer supported and will returnfalse. -
Requesting a private service with the
Container::get()method is no longer supported. -
The
strictattribute in service arguments has been removed. The attribute is ignored since 3.0, so you can simply remove it. -
Top-level anonymous services in XML are no longer supported.
- The
ContainerAwareEventDispatcherclass has been removed. UseEventDispatcherwith closure factories instead.
- The ability to pass a
ParserCacheInterfaceinstance to theExpressionLanguageclass has been removed. You should use theCacheItemPoolInterfaceinterface instead.
- The
ExceptionInterfacehas been removed. - The
Symfony\Component\Finder\Iterator\FilterIteratorclass has been removed as it used to fix a bug which existed before version 5.5.23/5.6.7
-
The
choices_as_valuesoption of theChoiceTypehas been removed. -
Support for data objects that implements both
TraversableandArrayAccessinResizeFormListener::preSubmitmethod has been removed. -
Using callable strings as choice options in ChoiceType is not supported anymore in favor of passing PropertyPath instances.
Before:
'choice_value' => new PropertyPath('range'), 'choice_label' => 'strtoupper',
After:
'choice_value' => 'range', 'choice_label' => function ($choice) { return strtoupper($choice); },
-
Caching of the loaded
ChoiceListInterfacein theLazyChoiceListhas been removed, it must be cached in theChoiceLoaderInterfaceimplementation instead. -
Calling
isValid()on aForminstance before submitting it is not supported anymore and raises an exception.Before:
if ($form->isValid()) { // ... }
After:
if ($form->isSubmitted() && $form->isValid()) { // ... }
-
Using the "choices" option in
CountryType,CurrencyType,LanguageType,LocaleType, andTimezoneTypewithout overriding thechoice_loaderoption is now ignored.Before:
$builder->add('custom_locales', LocaleType::class, array( 'choices' => $availableLocales, ));
After:
$builder->add('custom_locales', LocaleType::class, array( 'choices' => $availableLocales, 'choice_loader' => null, )); // or $builder->add('custom_locales', LocaleType::class, array( 'choice_loader' => new CallbackChoiceLoader(function () { return $this->getAvailableLocales(); }), ));
-
The
cache:clearcommand does not warmup the cache anymore. Warmup should be done via thecache:warmupcommand. -
The "framework.trusted_proxies" configuration option and the corresponding "kernel.trusted_proxies" parameter have been removed. Use the
Request::setTrustedProxies()method in your front controller instead. -
The default value of the
framework.workflows.[name].typeconfiguration options is nowstate_machine. -
Support for absolute template paths has been removed.
-
The following form types registered as services have been removed; use their fully-qualified class name instead:
"form.type.birthday""form.type.checkbox""form.type.collection""form.type.country""form.type.currency""form.type.date""form.type.datetime""form.type.email""form.type.file""form.type.hidden""form.type.integer""form.type.language""form.type.locale""form.type.money""form.type.number""form.type.password""form.type.percent""form.type.radio""form.type.range""form.type.repeated""form.type.search""form.type.textarea""form.type.text""form.type.time""form.type.timezone""form.type.url""form.type.button""form.type.submit""form.type.reset"
-
The
framework.serializer.cacheoption and the servicesserializer.mapping.cache.apcandserializer.mapping.cache.doctrine.apchave been removed. APCu should now be automatically used when available. -
The
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CompilerDebugDumpPasshas been removed. -
The
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddConsoleCommandPasshas been removed. UseSymfony\Component\Console\DependencyInjection\AddConsoleCommandPassinstead. -
The
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\SerializerPassclass has been removed. Use theSymfony\Component\Serializer\DependencyInjection\SerializerPassclass instead. -
The
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FormPassclass has been removed. Use theSymfony\Component\Form\DependencyInjection\FormPassclass instead. -
The
Symfony\Bundle\FrameworkBundle\EventListener\SessionListenerclass has been removed. Use theSymfony\Component\HttpKernel\EventListener\SessionListenerclass instead. -
The
Symfony\Bundle\FrameworkBundle\EventListener\TestSessionListenerclass has been removed. Use theSymfony\Component\HttpKernel\EventListener\TestSessionListenerclass instead. -
The
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ConfigCachePassclass has been removed. UseSymfony\Component\Config\DependencyInjection\ConfigCachePassclass instead. -
The
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\PropertyInfoPassclass has been removed. Use theSymfony\Component\PropertyInfo\DependencyInjection\PropertyInfoPassclass instead. -
Class parameters related to routing have been removed
- router.options.generator_class
- router.options.generator_base_class
- router.options.generator_dumper_class
- router.options.matcher_class
- router.options.matcher_base_class
- router.options.matcher_dumper_class
- router.options.matcher.cache_class
- router.options.generator.cache_class
-
The
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ControllerArgumentValueResolverPassclass has been removed. Use theSymfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPassclass instead. -
The
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\RoutingResolverPassclass has been removed. Use theSymfony\Component\Routing\DependencyInjection\RoutingResolverPassclass instead. -
The
Symfony\Bundle\FrameworkBundle\Translation\Translatorconstructor now takes the default locale as mandatory 3rd argument. -
The
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddValidatorInitializersPassclass has been removed. Use theSymfony\Component\Validator\DependencyInjection\AddValidatorInitializersPassclass instead. -
The
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddConstraintValidatorsPassclass has been removed. Use theSymfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPassclass instead. -
The
Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ValidateWorkflowsPassclass has been removed. Use theSymfony\Component\Workflow\DependencyInjection\ValidateWorkflowsPassclass instead. -
The
Symfony\Bundle\FrameworkBundle\Validator\ConstraintValidatorFactoryclass has been removed. UseSymfony\Component\Validator\ContainerConstraintValidatorFactoryinstead.
-
The
Request::setTrustedProxies()method takes a new$trustedHeaderSetargument. See http://symfony.com/doc/current/components/http_foundation/trusting_proxies.html for more info. -
The
Request::setTrustedHeaderName()andRequest::getTrustedHeaderName()methods have been removed. -
Extending the following methods of
Responseis no longer possible (these methods are nowfinal):setDate/getDatesetExpires/getExpiressetLastModified/getLastModifiedsetProtocolVersion/getProtocolVersionsetStatusCode/getStatusCodesetCharset/getCharsetsetPrivate/setPublicgetAgegetMaxAge/setMaxAgesetSharedMaxAgegetTtl/setTtlsetClientTtlgetEtag/setEtaghasVary/getVary/setVaryisInvalid/isSuccessful/isRedirection/isClientError/isServerErrorisOk/isForbidden/isNotFound/isRedirect/isEmpty
-
The ability to check only for cacheable HTTP methods using
Request::isMethodSafe()is not supported anymore, useRequest::isMethodCacheable()instead.
-
Removed the
kernel.root_dirparameter. Use thekernel.project_dirparameter instead. -
Removed the
Kernel::getRootDir()method. Use theKernel::getProjectDir()method instead. -
The
Extension::addClassesToCompile()andExtension::getClassesToCompile()methods have been removed. -
Possibility to pass non-scalar values as URI attributes to the ESI and SSI renderers has been removed. The inline fragment renderer should be used with non-scalar attributes.
-
The
ControllerResolver::getArguments()method has been removed. If you have your ownControllerResolverInterfaceimplementation, you should inject anArgumentResolverInterfaceinstance. -
The
DataCollector::varToString()method has been removed in favor ofcloneVar(). -
The
Psr6CacheClearer::addPool()method has been removed. Pass an array of pools indexed by name to the constructor instead. -
The
LazyLoadingFragmentHandler::addRendererService()method has been removed. -
The
X-Status-Codeheader method of setting a custom status code in the response when handling exceptions has been removed. There is now a newGetResponseForExceptionEvent::allowCustomResponseCode()method instead, which will tell the Kernel to use the response code set on the event's response object. -
The
Kernel::getEnvParameters()method has been removed. -
The
SYMFONY__environment variables are no longer processed automatically by Symfony. Use the%env()%syntax to get the value of any environment variable from configuration files instead.
- The
RenameEntryInterfacehas been deprecated, and merged withEntryManagerInterface
-
The
ProcessUtils::escapeArgument()method has been removed, use a command line array or give env vars to theProcess::start/run()method instead. -
Environment variables are always inherited in sub-processes.
-
Configuring
proc_open()options has been removed. -
Configuring Windows and sigchild compatibility is not possible anymore - they are always enabled.
-
Extending
Process::run(),Process::mustRun()andProcess::restart()is not supported anymore.
- The
ProxyDumperclass has been made final
-
The
RoleInterfacehas been removed. Extend theSymfony\Component\Security\Core\Role\Roleclass instead. -
The
LogoutUrlGenerator::registerListener()method expects a 6thstring $context = nullargument. -
The
AccessDecisionManager::setVoters()method has been removed. Pass the voters to the constructor instead.
-
The
FirewallContext::getContext()method has been removed, use thegetListeners()and/orgetExceptionListener()method instead. -
The
FirewallMap::$mapand$containerproperties have been removed. -
The
UserPasswordEncoderCommandclass does not allownullas the first argument anymore. -
UserPasswordEncoderCommanddoes not implementContainerAwareInterfaceanymore.
-
The ability to pass a Doctrine
Cacheinstance to theClassMetadataFactoryclass has been removed. You should use theCacheClassMetadataFactoryclass instead. -
Not defining the 6th argument
$format = nullof theAbstractNormalizer::instantiateObject()method when overriding it is not supported anymore. -
Extending
ChainDecoder,ChainEncoder,ArrayDenormalizeris not supported anymore.
- Removed the backup feature from the file dumper classes.
- The
ContainerAwareRuntimeLoaderclass has been removed. Use the TwigTwig_ContainerRuntimeLoaderclass instead.
-
Removed the possibility to inject the Form
TwigRendererinto theFormExtension. Upgrade Twig to^1.30, inject theTwig_Environmentinto theTwigRendererEngineand load theTwigRendererusing theTwig_FactoryRuntimeLoaderinstead.Before:
use Symfony\Bridge\Twig\Extension\FormExtension; use Symfony\Bridge\Twig\Form\TwigRenderer; use Symfony\Bridge\Twig\Form\TwigRendererEngine; // ... $rendererEngine = new TwigRendererEngine(array('form_div_layout.html.twig')); $rendererEngine->setEnvironment($twig); $twig->addExtension(new FormExtension(new TwigRenderer($rendererEngine, $csrfTokenManager)));
After:
$rendererEngine = new TwigRendererEngine(array('form_div_layout.html.twig'), $twig); $twig->addRuntimeLoader(new \Twig_FactoryRuntimeLoader(array( TwigRenderer::class => function () use ($rendererEngine, $csrfTokenManager) { return new TwigRenderer($rendererEngine, $csrfTokenManager); }, ))); $twig->addExtension(new FormExtension());
-
Removed the
TwigRendererEngineInterfaceinterface. -
The
TwigRendererEngine::setEnvironment()method has been removed. Pass the Twig Environment as second argument of the constructor instead.
-
The default value of the
strictoption of theChoiceconstraint was changed totrue. Using any other value will throw an exception. -
The
DateTimeValidator::PATTERNconstant was removed. -
Tests\Constraints\AbstractConstraintValidatorTesthas been removed in favor ofTest\ConstraintValidatorTestCase.Before:
// ... use Symfony\Component\Validator\Tests\Constraints\AbstractConstraintValidatorTest; class MyCustomValidatorTest extends AbstractConstraintValidatorTest { // ... }
After:
// ... use Symfony\Component\Validator\Test\ConstraintValidatorTestCase; class MyCustomValidatorTest extends ConstraintValidatorTestCase { // ... }
-
The default value of the strict option of the
ChoiceConstraint has been changed totrueas of 4.0. If you need the previous behaviour ensure to set the option tofalse.
- Removed class name support in
WorkflowRegistry::add()as second parameter.
-
Starting an unquoted string with a question mark followed by a space throws a
ParseException. -
Removed support for implicitly parsing non-string mapping keys as strings. Mapping keys that are no strings will result in a
ParseException. Use thePARSE_KEYS_AS_STRINGSflag to opt-in for keys to be parsed as strings.Before:
$yaml = <<<YAML null: null key true: boolean true 1: integer key 2.0: float key YAML; Yaml::parse($yaml);
After:
$yaml = <<<YAML null: null key true: boolean true 1: integer key 2.0: float key YAML; Yaml::parse($yaml, Yaml::PARSE_KEYS_AS_STRINGS);
-
Omitting the key of a mapping is not supported anymore and throws a
ParseException. -
Mappings with a colon (
:) that is not followed by a whitespace are not supported anymore and lead to aParseException(e.g.foo:barmust befoo: bar). -
Starting an unquoted string with
%leads to aParseException. -
The
Dumper::setIndentation()method was removed. Pass the indentation level to the constructor instead. -
Removed support for passing
true/falseas the second argument to theparse()method to trigger exceptions when an invalid type was passed.Before:
Yaml::parse('{ "foo": "bar", "fiz": "cat" }', true);
After:
Yaml::parse('{ "foo": "bar", "fiz": "cat" }', Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE);
-
Removed support for passing
true/falseas the third argument to theparse()method to toggle object support.Before:
Yaml::parse('{ "foo": "bar", "fiz": "cat" }', false, true);
After:
Yaml::parse('{ "foo": "bar", "fiz": "cat" }', Yaml::PARSE_OBJECT);
-
Removed support for passing
true/falseas the fourth argument to theparse()method to parse objects as maps.Before:
Yaml::parse('{ "foo": "bar", "fiz": "cat" }', false, false, true);
After:
Yaml::parse('{ "foo": "bar", "fiz": "cat" }', Yaml::PARSE_OBJECT_FOR_MAP);
-
Removed support for passing
true/falseas the fourth argument to thedump()method to trigger exceptions when an invalid type was passed.Before:
Yaml::dump(array('foo' => new A(), 'bar' => 1), 0, 0, true);
After:
Yaml::dump(array('foo' => new A(), 'bar' => 1), 0, 0, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE);
-
Removed support for passing
true/falseas the fifth argument to thedump()method to toggle object support.Before:
Yaml::dump(array('foo' => new A(), 'bar' => 1), 0, 0, false, true);
After:
Yaml::dump(array('foo' => new A(), 'bar' => 1), 0, 0, false, Yaml::DUMP_OBJECT);
-
The
!!php/objecttag to indicate dumped PHP objects was removed in favor of the!php/objecttag. -
Duplicate mapping keys lead to a
ParseException. -
The constructor arguments
$offset,$totalNumberOfLinesand$skippedLineNumbersof theParserclass were removed.