Согласно 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
, которая автоматически добавляет требуемые типы возврата в ваш код; - Для сторонних пакетов/бандлов с открытым исходным кодом процесс обновления аналогичен, но вам необходимо выполнить некоторые дополнительные действия, чтобы избежать сбоев обратной совместимости.