Symfony 6 что нового
Перейти к содержимому

Symfony 6 что нового

  • автор:

Upgrading & What’s New in Symfony 6!

Symfony 6 is here! Newer & shinier. it smells faintly of coconut! But, exactly what is new? And what’s the best path to upgrading?

Symfony 6 builds on top of Symfony 5. So if you love making huge changes like reorganizing all of your files, whelp, I’m sorry to disappoint! But even though Symfony 6 won’t require you to do a ton of work to upgrade to it, it does come with some wonderful features to make life easier. Let’s upgrade. then try some of those out. We’ll cover:

  • Upgrading to Symfony 5.4
  • The new Flex command for updating recipes ��
  • Updating all of our recipes
  • Converting from «attributes» to «annotations» with Rector
  • Finding & Removing deprecations
  • Upgrading to Symfony 6
  • . new features!

And we won’t even cover all the new features. that would take days! See Symfony.com 5.4/6.0 Features Blog for even more. Ok, let’s get to work!

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

Symfony 6.0 Release

Symfony 6.0 is no longer maintained. Consider upgrading to Symfony 6.3.

  • Status : Unmaintained
  • Requires: PHP 8.0.2 or higher
  • Latest patch version: 6.0.20
  • Released on: November 2021
  • End of support: January 2023
  • Source Code
  • Documentation
  • MIT License
  • Changelog
  • New features

TIP: Get this information in JSON format: https://symfony.com/releases/6.0.json

Symfony 6.0 is backed by SensioLabs. As the creator of Symfony, SensioLabs supports companies using Symfony, with an offering encompassing consultancy, expertise, services, training, and technical assistance to ensure the success of web application development projects.

PHP Дайджест № 216 (15 – 30 ноября 2021)

Подборка свежих новостей и материалов из мира PHP.
В выпуске: вышел PHP 8.1, создана организация PHP Foundation с целью развития и поддержки PHP, критическая уязвимость в doctrine/dbal, в PHP 8.2 будут объявлены устаревшими динамические свойства, вышли Symfony 6 и Symfony 5.4.
Также в выпуске полезные статьи, видео и другие новости сообщества.

Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск, плюсаните пост, пожалуйста.

Новости

Вышел PHP 8.1
  • Enums они же перечисления;
  • Readonly свойства;
  • First-class callable — получение ссылки на любую функцию;
  • Оператор new в инициализаторах (и вложенные атрибуты);
  • Файберы;
  • final константы в классах;
  • Новый тип never для (не)возвращаемых значений;
  • Запись восьмеричных чисел с префиксом 0o;
  • Оператор . поддерживает массивы со строковыми ключами;

В релизе Дмитрий Стогов и другие контрибьюторы сделали много улучшений по производительности.
На Symfony и Laravel прирост будет существенный (+23% к скорости на демо приложении Symfony).
На других приложениях, скорее всего, будет не так заметно. Например, на WordPress прирост будет до +3.5%

В релизе также много депрекейшнов, улучшений консистентности и обработки ошибок.

Основные депрекейшны:

  • Объявлено устаревшим неявное преобразование float в int , где теряется дробная часть;
  • Для Serializable необходимо использовать __serialize() / __unserialize() ;
  • Ограничено использование $GLOBALS ;
  • Объявлено устаревшим передача значения null в параметры встроенных функций, которые не nullable ;
  • Добавлены типы для возвращаемых значений встроенных классов (и новый атрибут #[ReturnTypeWillChange] );
  • Продолжено удаление типа resource . Ресурсы file_info, imap FTP Connection, LDAP, PostgreSQL теперь будут объектами, соответственно finfo, IMAP\Connection, FTP\Connection, PgSql\Connection, PgSql\Result.

Еще почитать-посмотреть:

  • Подробно: php.watch/versions/8.1
  • Коротко в видео: What’s New in PHP 8.1
  • Валентин Удальцов: Лайв-кодинг обзор PHP 8.1
  • Видеокурс от Spatie: New features in PHP 8.1

Важно:
Активная поддержка PHP 7.4 уже закончена, то есть будут только секьюрити фиксы в течение года.
А поддержка PHP 7.3 будет полностью прекращена 6 декабря.
Обновляйтесь!

The New Life of PHP – The PHP Foundation

JetBrains совместно с компаниями Automattic (WordPress), Acquia (Drupal), Laravel, Private Packagist (Composer), Symfony, Zend, Craft CMS, Tideways и PrestaShop учредили некоммерческую организацию PHP Foundation, миссия которой — обеспечить долгосрочное развитие языка PHP.

Одной из причин создания организации стало изменение интересов Никиты Попова. Уже 10 лет он занимался PHP и последние 3 года работу Никиты над PHP оплачивала компания JetBrains. Кроме PHP, Никита долгое время контрибьютил в LLVM и Rust. И вот теперь решил сосредоточить свою профессиональную деятельность на LLVM и с 1 декабря Никита перейдёт на работу в другую компанию. Никита все еще будет частью PHP-сообщества, но контрибьютить будет значительно меньше.

Первичная задача фонда — трудоустроить разработчиков в режиме полного или частичного рабочего дня, которые будут заниматься ядром интерпретатора PHP в репозитории php/php-src.

Подробно об истории создания и работе фонда я рассказал на стриме: Про PHP Foundation с Романом Пронским.

Еще про фонд и историю влияния на PHP можно прочитать в посте от Joe Watkins (сделал большой вклад в создание фонда).

Поддержать фонд донатом можно по ссылке:
opencollective.com/phpfoundation

Обновления о работе будем публиковать в твиттере: @ThePHPF.

Composer станет еще быстрее

В ближайшем релизе будет по умолчанию включен Pool Optimizer — это заметно ускорит операции установки обновления, причем чем сложнее набор зависимостей в composer.json, тем существеннее будет прирост скорости и меньше потребление памяти.

[RFC] Deprecate dynamic properties

Несмотря на многочисленные споры, предложение принято с перевесом всего в два голоса 52:25!

Это значит, что в PHP 8.2 динамические (необъявленные) свойства будут объявлены устаревшими, а в PHP 9.0 они будут вовсе удалены. Подробнее в PHP Дайджесте № 215.

В тему свежая статья от Larry Garfield про споры об эволюции PHP.

Вышла Doctrine DBAL 3.2.0

Также обнаружена критическая SQL-инъекция в doctrine/dbal 3.0.0 — 3.1.3, стоит немедленно обновиться до 3.1.4 или новее.

[RFC] Readonly classes

Máté Kocsis предлагает для PHP 8.2 readonly классы. По сути, это просто класс в котором все свойства readonly и запрещены динамические свойства. То есть это небольшой синтаксический сахар для удобства.

readonly class Foo

Эквивалентно:

class Foo < public readonly string $prop; public function __set($name, $value) < throw new Error('Cannot create dynamic property'); >> 

Инструменты

  • clue/framework-x — Реактивный микро-фреймворк от создателей ReactPHP.
  • marcosh/lamphpda — Набор иммутабельных структур для функционального программирования.
  • web3-php/web3 — Клиент для работы с Ethereum RPC.
  • SergiX44/Nutgram — Фреймворк для ботов Telegram с простым API.
  • CuyZ/Valinor — Маппер данных в строго-типизированные объекты.

Symfony

  • Вышли Symfony 6.0.0, Symfony 5.4.0
    Разница между ними в том, что Symfony 5.4 содержит устаревшие возможности и обратно совместим, а в Symfony 6.0 все deprecated удалены.
    Что нового можно посмотреть тут symfony.com/blog/category/living-on-the-edge.
  • Improve Symfony Tests Performance — Наиболее полный список практических советов для многократного уменьшения времени тестов от Макса Рафалко, автора Infection.
  • Using PHP 8.1 enumerations in Symfony
  • Smart-Factory фикстуры в Symfony — Cпособ организации фикстур в приложении.
  • Оптимистическая блокировка коллекций Агрегата при использовании Doctrine

Laravel

  • kirschbaum-development/mail-intercept — Пакет для перехвата отправляемых email в тестах.
  • Bitmasking in Laravel and MySQL
  • Что нового в Eloquent ORM в последних версиях Laravel.
  • Build Modern Laravel Apps Using Inertia.js — Бесплатный курс на Laracasts.
  • Стрим по тестированию с помощью Pest
  • Using a Laravel REST API with a NextJs App — Новое видео на официальном канале Laravel.

Yii

  • Подключение и Настройка ElasticSearch + MySql + Yii2

Статьи

  • Шпаргалка по современному PHP
  • A long way from Monolithic to Composable Architecture — Про изменение архитектуры Magento.
  • Архитектурное тестирование
  • Создаём игру на KPHP с помощью FFI и SDL
  • Уязвимость и баги, стоящие денег клиентам. Разбираем модуль от CS Coding для CMS CS Cart
  • Аналог Moodle или как преподаватель-юрист создавал собственную систему дистанционного обучения — Познавательная серия статей о прагматичном подходе.
  • Настройка PHP-FPM — Полезная заметка на канале Beer::PHP ��.
  • Практики внедрения зависимостей — Мега-статья от Дмитрия Елисеева.

Аудио/Видео

  • Как работает OPcache? — Свежий выпуск подкаста «Пятиминутка PHP».
  • Релиз PHP 8.1, запуск PHP Foundation и истории переезда на 8.0 — Запись стрима.

Сообщество

  • roberto-butti/50-drops-of-php — Бесплатная книга, в которой собраны полезные, малоизвестные, недооцененные функции или возможности PHP.
  • Дайджест Joomla за 2-е полугодие 2021
  • Дайджеcт новостей CycleORM
  • PHP Russia 2022 — Конференция пройдет 12 и 13 сентября в Москве.
    Приём заявок открыт до 28 марта — присылайте ваши идеи докладов, наш программный комитет поможет с доработкой!
    Вот как было в прошлом году: Видеоотчет о PHP Russia 2021.

Подписывайтесь на Telegram-канал PHP Digest.

Этот дайджест подготовлен совместно с Insolita. Если вам понравился выпуск, подпишитесь на Юлию в твиттере и поставьте плюс в пост, пожалуйста.

Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *