Подготовка ваших приложений и пакетов для Symfony 6

Согласно Symfony Release Process, каждые два года Symfony выпускает последнюю версию ветки (X.4) и первую версию следующей ветки (Y.0) одновременно. Это произойдет в конце Ноября 2021 года, когда будут выпущены и Symfony 5.4, и Symfony 6.0.

Основное различие между ними заключается в том, что Symfony 5.4 по-прежнему будет содержать все устаревшие функции, и вы можете использовать его в приложениях, использующих эти устаревшие функции. В Symfony 6.0 будут удалены все устаревшие функции. Сначала вам нужно будет перейти на версию 5.4, удалить все устаревшие версии кода, а затем выполнить обновление до версии 6.0.

Представляем типы PHP повсюду

На этот раз и Symfony 5.4, и 6.0 будут включать другое изменение, которое может иметь большое влияние на ваши приложения: добавлены типы PHP во все свойства, аргументы и возвращаемые значения методов, когда это возможно.

Это была титаническая многолетняя работа под руководством Николаса Грекаса и Александра М. Турека, которая могла быть завершена к Symfony 5.4 и 6.0.

Ниже приводится реальный пример влияния этого изменения на ваши приложения. Если у вас есть пользовательский класс, реализующий UserInterface от Symfony, ваш код, вероятно, будет включать следующее:

// src/Entity/User.php
namespace App\Entity;

use Symfony\Component\Security\Core\User\UserInterface;

class User implements UserInterface
{
    // ...

    public function getRoles()
    {
        // ...
    }
}

Начиная с Symfony 5.4/6.0 это не правильно. Причина в том, что в Symfony добавили возвращаемый тип массива в метод getRoles(). Из-за того, как типы работают в PHP, это означает, что вы обязательно должны добавить возвращаемый тип в свой код:

public function getRoles(): array
{
    // ...
}

Добавление типов PHP в ваш собственный код

Добавление всех необходимых типов PHP в ваши приложения может оказаться трудоемкой и обременительной задачей. Чтобы упростить задачу, Symfony предоставит несколько инструментов:

  • При обновлении до Symfony 5.4 вы будете видеть сообщения об устаревании всякий раз, когда отсутствующий тип в вашем коде вызовет ошибку PHP при обновлении;
  • Компонент ErrorHandler включает небольшую командную утилиту, называемую patch-type-declrations, которая автоматически добавляет требуемые типы возврата в ваш код;
  • Для сторонних пакетов/бандлов с открытым исходным кодом процесс обновления аналогичен, но вам необходимо выполнить некоторые дополнительные действия, чтобы избежать сбоев обратной совместимости.