Месяц назад вышел PHP 8.1 с новыми возможностями. Атрибуты теперь поддерживают вложенность, которой раньше не было. Это нам мешало перейти на них в 8.0. И не все библиотеки поддерживали атрибуты. Теперь же всё поддерживается и нас ничто не останавливает.
Пришла пора завершить переход на PHP 8.0 и перевести проект с классических аннотаций на новые нативные атрибуты для валидатора и Doctrine ORM. Поговорить, что делать с ними в legacy-проектах. И заодно обновиться на новые компоненты из версии Symfony 6 для бэкенда и подключить новый React Router 6 для фронтенда.
- 00:00:34 - Атрибуты в PHP 8
- 00:07:17 - Обновление фронтенда
- 00:09:10 - Переход на React Router 6
- 00:13:54 - Новые версии Cucumber
- 00:15:32 - Исправление закрытия браузера в E2E
- 00:17:13 - Увеличение таймаутов в E2E
- 00:18:23 - Регулировка числа потоков
- 00:19:46 - Версия Xdebug
- 00:20:35 - Обновление API
- 00:25:56 - Валидатор из Symfony 6
- 00:27:40 - Дополнительный тест на валидацию
- 00:28:54 - Восстановление валидации по аннотациям
- 00:33:08 - Перевод валидатора на атрибуты
- 00:34:48 - Перевод Doctrine ORM на атрибуты
- 00:41:17 - Драйвер для чтения атрибутов
- 00:44:25 - Донастройка CS Fixer
- 00:44:46 - Переход на атрибуты в legacy проекте
- 00:51:04 - Обзор результата
Скрытый контент
Чтобы не пропускать новые эпизоды подпишитесь на наш канал @deworkerpro в Telegram

Спасибо!
Добрый вечер, Дмитрий.
Как всегда на отлично)
Сразу же вопрос.
Есть всё-таки возможность поставить overtrue/phplint к symfony6.0? Если да, то как это можно делать?
Или забить на это и ждать пока обновится сам overtrue/phplint на использование symfony/console v6.0?
Вчера пытался найти посвежее пакет phplint, но пока ничего не попалось.
Или отправить Pull Request и не ждать.
Понял.
И вот ещё такая проблема.
После обновлений появилась ошибка
Пробовал в конфигурации nginx для frontend и gateway задать настройки
Но это не помогло.
Как ещё можно решить данную проблему?
Для
location /ws {...}
в проксировании настроить заголовок Connection.То есть, нужно создать для ws отдельный блок в настройках nginx, так же как делали для sockjs-node?
Да
А где поискать, как понять, какое именно обновление вызвало этот сбой?
В CHANGELOG пакетов, у которых были мажорные изменения.
Ошибка возникла после обновления react-scripts 4.0.3 -> 5.0.0
На github есть issues
К сожалению не помогает.
Добавил в frontend/docker/development/nginx/conf.d и в gateway/docker/development/nginx/conf.d, но ошибка всё-равно появляется.
Ругается на файл
строка 13
11 дней назад уже сделал такой PR. 4 дня назад выпустили версию 4.1 где есть поддержка Symfony 6. Пользуйтесь)
Спасибо.
Благодарю Дмитрий, даже я понял про атрибуты.
Интересно, несовместимость каких текущих пакетов помешала Вам прыгнуть сразу на PHP 8.1 ?
Традиционные вопросы чайника:
Какие папки мы вправе указывать как metadata_dirs для доктрины?
Пару недель назад были мелкие проблемы у PHP-CS-Fixer, которые уже исправили. Сейчас есть deprecations у пакета willdurand/negotiation.
А так в любом проекте можно посмотреть явно мешающие пакеты командой:
Для проверки реальной совместимости можно попробовать в локальном
Dockerfile
иcomposer.json
поменять версию и после пересборки запуститьapi-check
.Но помимо смены версии желательно и код перевести на новые возможности вроде
readonly
и Enums. Так что для перехода на PHP 8.1 нужен будет отдельный подробный эпизод.👍
PS: Ребята, осторожно. в 8.1 задепрекейтили кучу функций Я напоролся в продакшене :)
Именно. В своём коде это всё находит Psalm, но в коде чужих библиотек могут быть проблемы.
К сожалению, Psalm найдёт только если разработчик сам поставил deprecated в аннотации в докблоке своего кода.
А просто deprecated функции или куски кода в голом PHP он не находит.
Ранее у phpstan был плагин для поиска подобных вещей, но он давно не обновляется, так что сейчас в опенсорсе, наверное, и нет ничего, для поиска deprecated кода.
Можем. Рекурсивно ищет.
Может быть мусор, как у нас там лежат классы типов и репозиториев.
Благодарю! Тогда в чем фишка это фишки? При каких обстоятельтвах мы вынуждены будем указывать в массиве конфига кучу отдельных папок для Entity вместо просто одной папки?
У нас ни в чём, так как мэппинг везде одинаковый. Можно и так, и так.
Нам бы сейчас отдельные папки помогли постепенно модуль за модулем перевести с аннотаций на атрибуты большой проект.
Значит на производительность не повлияет указание одного src - Отлично!
Очень ценю Ваши ответы Дмитрий! 👊
После обновления react-scripts 4.0.3 -> 5.0.0 возникла ошибка:
Решается заменой в конфигах nginx
на
И добавлением в environment для frontend-node переменной
Без этой переменной не работает.
Ошибка больше в консоли не появлялась, "горячая" перезагрузка страницы работает.
Возможно кому-то поможет.
Спасибо!
Дима, когда примерно будет продолжение серии по Slim/React?
Спасибо, и есть вопрос по атрибутам, в проекте по Symfony для swagger`а использовались аннотации, а как такие же анотации перевести в атрибуты? вот пример из вашего проекта используется php 8.1
Аналогично, но с ключами вроде
parameters
иresponses
:понял, спасибо большое, к примеру выходит как то так
еще вопрос, phpStorm начиная с new OAT\Response подсвечивает все красным, однако код работает и документацию делает правильно и я не нашел плагинов которые бы ему объяснили что все норм
Вопрос отпал сам собой, оказывается phpstorm 2021.2 так не умел, обновился до .3 и все отлично!
Или войти через: