Skip to content

Latest commit

 

History

History
464 lines (332 loc) · 16 KB

UPGRADE-3.4.md

File metadata and controls

464 lines (332 loc) · 16 KB

UPGRADE FROM 3.3 to 3.4

DependencyInjection

  • Definitions and aliases will be made private by default in 4.0. You should either use service injection or explicitly define your services as public if you really need to inject the container.

  • Relying on service auto-registration while autowiring is deprecated and won't be supported in Symfony 4.0. Explicitly inject your dependencies or create services whose ids are their fully-qualified class name.

    Before:

    namespace App\Controller;
    
    use App\Mailer;
    
    class DefaultController
    {
        public function __construct(Mailer $mailer) {
            // ...
        }
    
        // ...
    }
    services:
        App\Controller\DefaultController:
            autowire: true

    After:

    // same PHP code
    services:
        App\Controller\DefaultController:
            autowire: true
    
        # or
        # App\Controller\DefaultController:
        #     arguments: { $mailer: "@App\Mailer" }
    
        App\Mailer:
            autowire: true
  • Top-level anonymous services in XML are deprecated and will throw an exception in Symfony 4.0.

  • Case insensitivity of parameter names is deprecated and will be removed in 4.0.

  • The ResolveDefinitionTemplatesPass class is deprecated and will be removed in 4.0. Use the ResolveChildDefinitionsPass class instead.

Debug

  • Support for stacked errors in the ErrorHandler is deprecated and will be removed in Symfony 4.0.

DoctrineBridge

  • Deprecated Symfony\Bridge\Doctrine\HttpFoundation\DbalSessionHandler and Symfony\Bridge\Doctrine\HttpFoundation\DbalSessionHandlerSchema. Use Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler instead.

EventDispatcher

  • Implementing TraceableEventDispatcherInterface without the reset() method is deprecated and will be unsupported in 4.0.

Filesystem

  • The Symfony\Component\Filesystem\LockHandler class has been deprecated, use the Symfony\Component\Lock\Store\FlockStore class or the Symfony\Component\Lock\Store\FlockStore\SemaphoreStore class directly instead.
  • Support for passing relative paths to Filesystem::makePathRelative() is deprecated and will be removed in 4.0.

Finder

  • The Symfony\Component\Finder\Iterator\FilterIterator class has been deprecated and will be removed in 4.0 as it used to fix a bug which existed before version 5.5.23/5.6.7.

Form

  • Deprecated ChoiceLoaderInterface implementation in TimezoneType. Use the "choice_loader" option instead.

    Before:

    class MyTimezoneType extends TimezoneType
    {
        public function loadChoices()
        {
            // override the method
        }
    }

    After:

    class MyTimezoneType extends AbstractType
    {
        public function. getParent()
        {
            return TimezoneType::class;
        }
    
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefault('choice_loader', ...); // override the option instead
        }
    }

FrameworkBundle

  • The session.use_strict_mode option has been deprecated and is enabled by default.

  • The cache:clear command doesn't clear "app" PSR-6 cache pools anymore, but still clears "system" ones. Use the cache:pool:clear command to clear "app" pools instead.

  • The doctrine/cache dependency has been removed; require it via composer require doctrine/cache if you are using Doctrine cache in your project.

  • The validator.mapping.cache.doctrine.apc service has been deprecated.

  • The symfony/stopwatch dependency has been removed, require it via composer require symfony/stopwatch in your dev environment.

  • Using the KERNEL_DIR environment variable or the automatic guessing based on the phpunit.xml / phpunit.xml.dist file location is deprecated since 3.4. Set the KERNEL_CLASS environment variable to the fully-qualified class name of your Kernel instead. Not setting the KERNEL_CLASS environment variable will throw an exception on 4.0 unless you override the KernelTestCase::createKernel() or KernelTestCase::getKernelClass() method.

  • The KernelTestCase::getPhpUnitXmlDir() and KernelTestCase::getPhpUnitCliConfigArgument() methods are deprecated since 3.4 and will be removed in 4.0.

  • The --no-prefix option of the translation:update command is deprecated and will be removed in 4.0. Use the --prefix option with an empty string as value instead (e.g. --prefix="")

  • The Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddCacheClearerPass class has been deprecated and will be removed in 4.0. Use tagged iterator arguments instead.

  • The Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddCacheWarmerPass class has been deprecated and will be removed in 4.0. Use tagged iterator arguments instead.

  • The Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TranslationDumperPass class has been deprecated and will be removed in 4.0. Use the Symfony\Component\Translation\DependencyInjection\TranslationDumperPass class instead.

  • The Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TranslationExtractorPass class has been deprecated and will be removed in 4.0. Use the Symfony\Component\Translation\DependencyInjection\TranslationExtractorPass class instead.

  • The Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TranslatorPass class has been deprecated and will be removed in 4.0. Use the Symfony\Component\Translation\DependencyInjection\TranslatorPass class instead.

  • The Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader class has been deprecated and will be removed in 4.0. Use the Symfony\Component\Translation\Reader\TranslationReader class instead.

  • The translation.loader service has been deprecated and will be removed in 4.0. Use the translation.reader service instead..

  • AssetsInstallCommand::__construct() now takes an instance of Symfony\Component\Filesystem\Filesystem as first argument. Not passing it is deprecated and will throw a TypeError in 4.0.

  • CacheClearCommand::__construct() now takes an instance of Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface as first argument. Not passing it is deprecated and will throw a TypeError in 4.0.

  • CachePoolClearCommand::__construct() now takes an instance of Symfony\Component\HttpKernel\CacheClearer\Psr6CacheClearer as first argument. Not passing it is deprecated and will throw a TypeError in 4.0.

  • EventDispatcherDebugCommand::__construct() now takes an instance of Symfony\Component\EventDispatcher\EventDispatcherInterface as first argument. Not passing it is deprecated and will throw a TypeError in 4.0.

  • RouterDebugCommand::__construct() now takes an instance of Symfony\Component\Routing\RouterInteface as first argument. Not passing it is deprecated and will throw a TypeError in 4.0.

  • RouterMatchCommand::__construct() now takes an instance of Symfony\Component\Routing\RouterInteface as first argument. Not passing it is deprecated and will throw a TypeError in 4.0.

  • TranslationDebugCommand::__construct() now takes an instance of Symfony\Component\Translation\TranslatorInterface as first argument. Not passing it is deprecated and will throw a TypeError in 4.0.

  • TranslationUpdateCommand::__construct() now takes an instance of Symfony\Component\Translation\TranslatorInterface as first argument. Not passing it is deprecated and will throw a TypeError in 4.0.

  • AssetsInstallCommand, CacheClearCommand, CachePoolClearCommand, EventDispatcherDebugCommand, RouterDebugCommand, RouterMatchCommand, TranslationDebugCommand, TranslationUpdateCommand, XliffLintCommand and YamlLintCommand classes have been marked as final

  • The Symfony\Bundle\FrameworkBundle\Translation\PhpExtractor class has been deprecated and will be removed in 4.0. Use the Symfony\Component\Translation\Extractor\PhpExtractor class instead.

  • The Symfony\Bundle\FrameworkBundle\Translation\PhpStringTokenParser class has been deprecated and will be removed in 4.0. Use the Symfony\Component\Translation\Extractor\PhpStringTokenParser class instead.

HttpFoundation

  • The Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeSessionHandler class has been deprecated and will be removed in 4.0. Use the \SessionHandler class instead.

  • The Symfony\Component\HttpFoundation\Session\Storage\Handler\WriteCheckSessionHandler class has been deprecated and will be removed in 4.0. Implement SessionUpdateTimestampHandlerInterface or extend AbstractSessionHandler instead.

  • The Symfony\Component\HttpFoundation\Session\Storage\Proxy\NativeProxy class has been deprecated and will be removed in 4.0. Use your \SessionHandlerInterface implementation directly.

  • Using Symfony\Component\HttpFoundation\Session\Storage\Handler\MongoDbSessionHandler with the legacy mongo extension has been deprecated and will be removed in 4.0. Use it with the mongodb/mongodb package and ext-mongodb instead.

  • The Symfony\Component\HttpFoundation\Session\Storage\Handler\MemcacheSessionHandler class has been deprecated and will be removed in 4.0. Use Symfony\Component\HttpFoundation\Session\Storage\Handler\MemcachedSessionHandler instead.

HttpKernel

  • Bundle inheritance has been deprecated.

  • Relying on convention-based commands discovery has been deprecated and won't be supported in 4.0. Use PSR-4 based service discovery instead.

    Before:

    # app/config/services.yml
    services:
        # ...
    
        # implicit registration of all commands in the `Command` folder

    After:

    # app/config/services.yml
    services:
        # ...
    
        # explicit commands registration
        AppBundle\Command:
            resource: '../../src/AppBundle/Command/*'
            tags: ['console.command']
  • The getCacheDir() method of your kernel should not be called while building the container. Use the %kernel.cache_dir% parameter instead. Not doing so may break the cache:clear command.

  • The Symfony\Component\HttpKernel\Config\EnvParametersResource class has been deprecated and will be removed in 4.0.

  • Implementing DataCollectorInterface without a reset() method has been deprecated and will be unsupported in 4.0.

  • Implementing DebugLoggerInterface without a clear() method has been deprecated and will be unsupported in 4.0.

  • The ChainCacheClearer::add() method has been deprecated and will be removed in 4.0, inject the list of clearers as a constructor argument instead.

  • The CacheWarmerAggregate::add() and setWarmers() methods have been deprecated and will be removed in 4.0, inject the list of clearers as a constructor argument instead.

  • The CacheWarmerAggregate and ChainCacheClearer classes have been made final.

Process

  • The Symfony\Component\Process\ProcessBuilder class has been deprecated, use the Symfony\Component\Process\Process class directly instead.

  • Calling Process::start() without setting a valid working directory (via setWorkingDirectory() or constructor) beforehand is deprecated and will throw an exception in 4.0.

Profiler

  • The profiler.matcher option has been deprecated.

Security

  • Deprecated the HTTP digest authentication: NonceExpiredException, DigestAuthenticationListener and DigestAuthenticationEntryPoint will be removed in 4.0. Use another authentication system like http_basic instead.

  • The GuardAuthenticatorInterface has been deprecated and will be removed in 4.0. Use AuthenticatorInterface instead.

SecurityBundle

  • Using voters that do not implement the VoterInterfaceis now deprecated in the AccessDecisionManager and this functionality will be removed in 4.0.

  • FirewallContext::getListeners() now returns \Traversable|array

  • InitAclCommand::__construct() now takes an instance of Doctrine\DBAL\Connection as first argument. Not passing it is deprecated and will throw a TypeError in 4.0.

  • The acl:set command has been deprecated along with the SetAclCommand class, both will be removed in 4.0. Install symfony/acl-bundle instead

  • The init:acl command has been deprecated along with the InitAclCommand class, both will be removed in 4.0. Install symfony/acl-bundle and use acl:init instead

  • Added logout_on_user_change to the firewall options. This config item will trigger a logout when the user has changed. Should be set to true to avoid deprecations in the configuration.

  • Deprecated the HTTP digest authentication: HttpDigestFactory will be removed in 4.0. Use another authentication system like http_basic instead.

  • Deprecated setting the switch_user.stateless option to false when the firewall is stateless. Setting it to false will have no effect in 4.0.

  • Not configuring explicitly the provider on a firewall is ambiguous when there is more than one registered provider. Using the first configured provider is deprecated since 3.4 and will throw an exception on 4.0. Explicitly configure the provider to use on your firewalls.

Translation

  • Symfony\Component\Translation\Writer\TranslationWriter::writeTranslations has been deprecated and will be removed in 4.0, use Symfony\Component\Translation\Writer\TranslationWriter::write instead.

  • Passing a Symfony\Component\Translation\MessageSelector to Translator has been deprecated. You should pass a message formatter instead

    Before:

    use Symfony\Component\Translation\Translator;
    use Symfony\Component\Translation\MessageSelector;
    
    $translator = new Translator('fr_FR', new MessageSelector());

    After:

    use Symfony\Component\Translation\Translator;
    use Symfony\Component\Translation\Formatter\MessageFormatter;
    
    $translator = new Translator('fr_FR', new MessageFormatter());

TwigBridge

  • deprecated the Symfony\Bridge\Twig\Form\TwigRenderer class, use the FormRenderer class from the Form component instead

  • deprecated Symfony\Bridge\Twig\Command\DebugCommand::set/getTwigEnvironment and the ability to pass a command name as first argument

  • deprecated Symfony\Bridge\Twig\Command\LintCommand::set/getTwigEnvironment and the ability to pass a command name as first argument

TwigBundle

  • deprecated the Symfony\Bundle\TwigBundle\Command\DebugCommand class, use the DebugCommand class from the Twig bridge instead

  • deprecated relying on the ContainerAwareInterface implementation for Symfony\Bundle\TwigBundle\Command\LintCommand

Validator

  • Not setting the strict option of the Choice constraint to true is deprecated and will throw an exception in Symfony 4.0.

Yaml

  • the Dumper, Parser, and Yaml classes are marked as final

  • using the !php/object: tag is deprecated and won't be supported in 4.0. Use the !php/object tag (without the colon) instead.

  • using the !php/const: tag is deprecated and won't be supported in 4.0. Use the !php/const tag (without the colon) instead.

    Before:

    !php/const:PHP_INT_MAX

    After:

    !php/const PHP_INT_MAX
  • Support for the !str tag is deprecated, use the !!str tag instead.

  • Using the non-specific tag ! is deprecated and will have a different behavior in 4.0. Use a plain integer or !!float instead.

  • Using the Yaml::PARSE_KEYS_AS_STRINGS flag is deprecated as it will be removed in 4.0.

    Before:

    $yaml = <<<YAML
    null: null key
    true: boolean true
    2.0: float key
    YAML;
    
    Yaml::parse($yaml, Yaml::PARSE_KEYS_AS_STRINGS);

    After:

    $yaml = <<<YAML
    "null": null key
    "true": boolean true
    "2.0": float key
    YAML;
    
    Yaml::parse($yaml);