Skip to content

Latest commit

 

History

History
276 lines (216 loc) · 10.4 KB

UPGRADE-4.2.md

File metadata and controls

276 lines (216 loc) · 10.4 KB

UPGRADE FROM 4.1 to 4.2

BrowserKit

  • The Client::submit() method will have a new $serverParameters argument in version 5.0, not defining it is deprecated.

Cache

  • Deprecated CacheItem::getPreviousTags(), use CacheItem::getMetadata() instead.

Config

  • Deprecated constructing a TreeBuilder without passing root node information.
  • Deprecated FileLoaderLoadException, use LoaderLoadException instead.

Console

  • Deprecated passing a command as a string to ProcessHelper::run(), pass the command as an array of arguments instead.

    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'));

DoctrineBridge

  • The lazy attribute on doctrine.event_listener tags was removed. Listeners are now lazy by default. So any lazy attributes can safely be removed from those tags.

DomCrawler

  • The Crawler::children() method will have a new $selector argument in version 5.0, not defining it is deprecated.

Finder

  • The Finder::sortByName() method will have a new $useNaturalSort argument in version 5.0, not defining it is deprecated.

Form

  • The getExtendedType() method of the FormTypeExtensionInterface is deprecated and will be removed in 5.0. Type extensions must implement the static getExtendedTypes() method instead and 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 of the IntegerType is deprecated.

  • The $scale argument of the IntegerToLocalizedStringTransformer is deprecated.

  • Deprecated calling FormRenderer::searchAndRenderBlock for fields which were already rendered. Instead of expecting such calls to return empty strings, check if the field has already been rendered.

    Before:

    {% for field in fieldsWithPotentialDuplicates %}
       {{ form_widget(field) }}
    {% endfor %}

    After:

    {% for field in fieldsWithPotentialDuplicates if not field.rendered %}
       {{ form_widget(field) }}
    {% endfor %}

HttpFoundation

  • The default value of the "$secure" and "$samesite" arguments of Cookie's constructor will respectively change from "false" to "null" and from "null" to "lax" in Symfony 5.0, you should define their values explicitly or use "Cookie::create()" instead.

FrameworkBundle

  • The framework.router.utf8 configuration option has been added. If your app's charset is UTF-8 (see kernel's getCharset() method), it is recommended to set it to true: this will generate 404s for non-UTF-8 URLs, which are incompatible with you app anyway, and will allow dumping optimized routers and using Unicode classes in requirements.

  • Added support for the SameSite attribute for session cookies. It is highly recommended to set this setting (framework.session.cookie_samesite) to lax for increased security against CSRF attacks.

  • The Controller class has been deprecated, use AbstractController instead.

  • The Messenger encoder/decoder configuration has been changed for a unified Messenger serializer configuration.

    Before:

    framework:
        messenger:
            encoder: your_encoder_service_id
            decoder: your_decoder_service_id

    After:

    framework:
        messenger:
            serializer:
                id: your_messenger_service_id
  • The ContainerAwareCommand class has been deprecated, use Symfony\Component\Console\Command\Command with dependency injection instead.

  • The --env console option and its "-e" shortcut have been deprecated, set the "APP_ENV" environment variable instead.

  • The --no-debug console option has been deprecated, set the "APP_DEBUG" environment variable to "0" instead.

  • The Templating\Helper\TranslatorHelper::transChoice() method has been deprecated, use the trans() one instead with a %count% parameter.

Messenger

  • EnvelopeItemInterface doesn't extend Serializable anymore

  • The handle method of the Symfony\Component\Messenger\Middleware\ValidationMiddleware and Symfony\Component\Messenger\Asynchronous\Middleware\SendMessageMiddleware middlewares now requires an Envelope object to be given (because they implement the EnvelopeAwareInterface). When using these middleware with the provided MessageBus, you will not have to do anything. If you use the middlewares any other way, you can use Envelope::wrap($message) to create an envelope for your message.

  • MessageSubscriberInterface::getHandledMessages() return value has changed. The value of an array item needs to be an associative array or the method name.

    Before:

    return [
       [FirstMessage::class, 0],
       [SecondMessage::class, -10],
    ];

    After:

    yield FirstMessage::class => ['priority' => 0];
    yield SecondMessage::class => ['priority => -10];

    Before:

    return [
        SecondMessage::class => ['secondMessageMethod', 20],
    ];

    After:

    yield SecondMessage::class => [
        'method' => 'secondMessageMethod',
        'priority' => 20,
    ];
  • The EncoderInterface and DecoderInterface interfaces have been replaced by a unified Symfony\Component\Messenger\Transport\Serialization\SerializerInterface. Each interface method have been merged untouched into the Serializer interface, so you can simply merge your two implementations together and implement the new interface.

Monolog

  • The methods DebugProcessor::getLogs(), DebugProcessor::countErrors(), Logger::getLogs() and Logger::countErrors() will have a new $request argument in version 5.0, not defining it is deprecated.

Process

  • Deprecated the Process::setCommandline() and the PhpProcess::setPhpBinary() methods.

  • Deprecated passing commands as strings 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');

Security

  • Using the has_role() function in security expressions is deprecated, use the is_granted() function instead.
  • Not returning an array of 3 elements from FirewallMapInterface::getListeners() is deprecated, the 3rd element must be an instance of LogoutListener or null.
  • Passing custom class names to the Symfony\Component\Security\Core\Authentication\AuthenticationTrustResolver to define custom anonymous and remember me token classes is deprecated. To use custom tokens, extend the existing Symfony\Component\Security\Core\Authentication\Token\AnonymousToken or Symfony\Component\Security\Core\Authentication\Token\RememberMeToken.
  • Accessing the user object that is not an instance of UserInterface from Security::getUser() is deprecated.
  • SimpleAuthenticatorInterface, SimpleFormAuthenticatorInterface, SimplePreAuthenticatorInterface, SimpleAuthenticationProvider, SimpleAuthenticationHandler, SimpleFormAuthenticationListener and SimplePreAuthenticationListener have been deprecated. Use Guard instead.

SecurityBundle

  • Passing a FirewallConfig instance as 3rd argument to the FirewallContext constructor is deprecated, pass a LogoutListener instance instead.
  • Using the security.authentication.trust_resolver.anonymous_class and security.authentication.trust_resolver.rememberme_class parameters to define the token classes is deprecated. To use custom tokens extend the existing AnonymousToken and RememberMeToken.
  • The simple_form and simple_preauth authentication listeners have been deprecated, use Guard instead.
  • The SimpleFormFactory and SimplePreAuthenticationFactory classes have been deprecated, use Guard instead.

Serializer

  • Relying on the default value (false) of the "as_collection" option is deprecated. You should set it to false explicitly instead as true will be the default value in 5.0.
  • The AbstractNormalizer::handleCircularReference() method will have two new $format and $context arguments in version 5.0, not defining them is deprecated.

Translation

  • The TranslatorInterface has been deprecated in favor of Symfony\Contracts\Translation\TranslatorInterface
  • The Translator::transChoice() method has been deprecated in favor of using Translator::trans() with "%count%" as the parameter driving plurals
  • The MessageSelector, Interval and PluralizationRules classes have been deprecated, use IdentityTranslator instead
  • The Translator::getFallbackLocales() and TranslationDataCollector::getFallbackLocales() method have been marked as internal

TwigBundle

  • The transchoice tag and filter have been deprecated, use the trans ones instead with a %count% parameter.

Validator

  • The checkMX and checkHost properties of the Email constraint are deprecated
  • The component is now decoupled from symfony/translation and uses Symfony\Contracts\Translation\TranslatorInterface instead
  • The ValidatorBuilderInterface has been deprecated and ValidatorBuilder made final
  • Deprecated validating instances of \DateTimeInterface in DateTimeValidator, DateValidator and TimeValidator. Use Type instead or remove the constraint if the underlying model is type hinted to \DateTimeInterface already.
  • Using the Bic, Country, Currency, Language and Locale constraints without symfony/intl is deprecated
  • Using the Email constraint without egulias/email-validator is deprecated
  • Using the Expression constraint without symfony/expression-language is deprecated

WebServerBundle

  • Omitting the $environment argument of the ServerRunCommand and ServerStartCommand constructors is deprecated.