Новости Yii 2020, выпуск 7 +23


AliExpress RU&CIS

Всем привет! Это очередной выпуск новостей Yii. Как обычно, в выпуске вас ждут релизы Yii 2, прогресс Yii 3, важные вести о Yii 1 и другие новости. Приятного чтения и будьте здоровы. — Александр Макаров


Фонд


С прошлого выпуска пришлось прилично отвлечься на фонд, а именно на то, как средства перебрасываются из GitHub Sponsors в OpenCollective. С GitHub они уходили нормально, а вот куда — большой вопрос. Потребовалось время, чтобы разобраться, но проблему удалось решить.


Ещё одна новость, частично связанная с фондом. Автор httpsoft/http-message, Евгений Зюбин, вероятно присоединится к команде фулл-тайм если/когда это позволит пополнение фонда. Если вы или ваша компания хотите получить Yii 3 раньше, можете помочь.


Инфраструктура


Мы постоянно улучшаем процесс тестирования пакетов:


  • В пакеты со стабильной версией добавлена проверка Roave backwards compatibility.
    Она проверяет что публичный API не сломан по-сравнению с предыдущим стабильным релизом.
  • Мы продолжили перевод тестов с Travis на GitHub actions как для Yii 2, так и для Yii 3. Actions классные, а Travis не так давно порезал поддержку OpenSource. Хорошо что мы начали переход заранее.
  • Мы решили не собирать покрытие кода через PHPUnit с последующей отсылкой его в Scrutinizer CI и теперь генерируем отчёт о покрытии средствами Scrutinizer. Это значительно быстрее, а результат тот же.
  • Отлично себя показал Psalm. Рекомендуем, в том числе, для ваших проектов.
  • В консоль GitHub actions теперь всё выводится в цвете. Выглядит значительно лучше!

Немного правок были сделаны на сайте. Прежде всего это переход на новый метод аутентификации GitHub API. Также был сделан ряд небольших улучшений фронтенда.


Патчи для совместимости с PHPUnit для Yii 2 и Yii 1 переехали в отдельный репозиторий. Если вдруг вам понадобится тестировать приложение на версиях PHP с 5.3 по 8, репозиторий будет определённо полезен.


Yii 1



Yii 2


Был выпущен Yii 2.0.39. В нём есть улучшения DI-контейнера и дополнительные исправления для работы с PHP 8.


Чуть менее заметное улучшение коснулось способа генерации аннотаций для магических свойств. Теперь некоторые IDE, включая PhpStorm, будут отличать свойства только для чтения и только для записи.


Были выпущены новые версии следующих расширений:



Yii 3


С прошлого выпуска были сделаны следующие релизы:



На данный момент мы готовим пакеты из списка в карточке Trello.


Был принят ряд интересных решений:


  • Все стабильные релизы будут начинаться с версии 1.0.0. Ранее рассматривался вариант начинать с 3.0.0.
  • Пакеты Yii 3.0 будут поддерживать PHP 7.4.
  • В большинство пакетов добавлена конфигурация по-умолчанию. Они будут работать сразу после установки без дополнительной конфигурации или с очень минимальной конфигурацией.
  • Провайдеры конфигурации были удалены почти из всех пакетов и приложений.

В Trello есть доска с задачами, над которыми мы работаем, включая не отражённые в GitHub issue.


Почти каждый из пакетов был серьёзно почищен, получил совместимость с PHP 8 и исправления. Ниже представлено самое интересное.


Новые пакеты


Был создан ряд новых пакетов. Часть из них появились в результате выделения общего кода из других пакетов, а часть — нет.



Инструменты для разработки


  • Были актуализированы зависимости и добавлен Dockerfile.
  • Реализована возможность полу-автоматического выпуска релизов.

Composer config plugin


Была добавлена временная поддержка PHP 8. Она не заменяет вариант с переписыванием плагина на AST и нужна для того, чтобы облегчить тестирование под PHP 8 в то время как мы занимаемся версией с AST.


Контейнер и фабрика



Кеш



Bulma


  • Больше документации, улучшено именование.
  • Добавлена возможность использовать значки в выпадающем меню.
  • Все виджеты сделаны иммутабельными.

Роутер


  • Внутренности и конфигурация упрощены путём выделения коллекции маршрутов в отдельный класс.
  • Метод UrlMatcherInterface::getLastMatchedRequest() удалён, добавлен getCurrentUri().
  • UrlMatcher теперь является опциональным, что хорошо сочетается с консольными приложениями.

Шаблоны приложений и демо


  • Больше не требуется NodeJs. Ресурсы забираются через asset packagist.
  • Конфиги значительно почищены. В app мы поделили их по разным пакетам.
  • Убрана ссылка контейнера на себя.
  • В yii-demo добавлен Swagger. Открывается через /swagger.
  • yii-demo подвергся рефакторингу.
  • Заменили в yii-demo реализацию PSR-7 на httpsoft/http-message.

Var dumper



Files



Cycle


  • В файловую схему теперь можно писать. Также в неё добавлена поддержка чтения из нескольких файлов.
  • Был задействованы наши DI контейнер / фабрика, так что интеграция с Cycle теперь работает на PHP 8.

Data



DBAL и ActiveRecord


Как DBAL, так и ActiveRecord, портированные с Yii 2, ещё рефакторить и рефакторить несмотря на то, что их серьёзно почистили и они, по большей части, работают.


Arrays



HTML



Debugger



Очереди



Translator


Пакеты i18n помечены как устаревшие, добавлены пакеты translator с новым дизайном.


Новая и изменённая документация



Рекомендации к чтению и другие новости



?Спасибо!


Хочу сказать спасибо всем спонсорам и разработчикам, благодаря которым стала возможна разработка Yii 3. Вместе у нас всё получится.


Отдельное спасибо тем, кто помог Yii 3 кодом:





Комментарии (9):

  1. istepan
    /#22294360

    Отличные новости.
    В docker шаблонов будет по умолчанию доступен xdebug для dev окружения?

    Будет ли решена проблема владельцев файла, если создание происходит через консоль gii?
    Уточню.
    У меня сейчас развернут проект в окружении docker, если создавать, например модель, через консольную утилиту gii, то файлы создаются по умолчанию владельца root.
    Приходится на хосте делать вручную команду chown.
    Может есть какие-то способы решения? Или я не правильно использую gii и его надо выполнять на хосте (тогда на хосте надо разворачивать php и настраивать доступ к базе)?

    • SamDark
      /#22295482

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

    • mj4444
      /#22300354

      Это проблема вашего докера.

      ARG PHP_VERSION
      FROM yiisoftware/yii-php:${PHP_VERSION}-apache
      
      ARG UID
      ARG GID
      ENV UID=${UID:-1000} GID=${GID:-1000}
      RUN usermod -u ${UID} www-data; groupmod -g ${GID} www-data; chsh -s /bin/bash www-data
      
      RUN pecl install xdebug; docker-php-ext-enable xdebug
      


        php:
          build:
            context: ./php
            args:
              - PHP_VERSION
              - UID
              - GID
         env_file:
            - ./.env
      
      
      PHP_VERSION=7.4
      UID=1000
      GID=1000
      PHP_USER_ID=1000
      


      docker-compose exec php bash # as root
      docker-compose exec php su www-data # as current user
      

      Только никому не рассказывайте про этот лайфхак.

      • istepan
        /#22300410

        Спасибо большое!

        Запускать все хозяйство на хосте я как-то научился
        volumes:
        - /etc/passwd:/etc/passwd:ro
        - /etc/group:/etc/group:ro


        PHP_EXTRA_CONFIGURE_ARGS=--enable-fpm --with-fpm-user=stepan --with-fpm-group=users
        PHP_USER_NAME=stepan
        PHP_USER_GROUP=users
        NGINX_USER_NAME=stepan
        NGINX_USER_GROUP=users
        NGINX_UID=1000
        NGINX_GID=985


        Но ваш лайфак всё в корне переворачивает и делает гибче.

        • mj4444
          /#22300426

          Я дополнил коммент после вашего ответа

          docker-compose exec php bash # as root
          docker-compose exec php su www-data # as current user
          


          volumes:
          - /etc/passwd:/etc/passwd:ro
          - /etc/group:/etc/group:ro


          Это делать не нужно. Лучше использовать пользователей по умолчанию, подменив их ID вашими.

  2. sanchezzzhak
    /#22295602

    Больше информации хотелось видеть по работе с бд, формами в документации, это то что тормозит использование 3 версии.
    Cycle, ActiveRecord.


    Не нашел информации по создании миграции как в 2й версии, какой подход сейчас? Как в симфония через аннотации? Пример был бы кстати

    • SamDark
      /#22295646

      Да, сейчас фокус сместился на код, документацию в следующей итерации обновим. Для Cycle есть родная документация и мини-гайд в пакете интеграции: https://github.com/yiisoft/yii-cycle/blob/master/docs/ru/README.md


      Не нашел информации по создании миграции как в 2й версии, какой подход сейчас?

      В Cycle миграции есть в пакете интеграции. Там можно через аннотации.


      Для db есть https://github.com/yiisoft/yii-db-migration. Там подход как в Yii 2.

  3. wolfandman
    /#22300342

    Александр, возможно ли ожидать, что появятся аннотации для, как в symfony для роутинга?

    • SamDark
      /#22300352

      Ну, технически ничего сделать не мешает. Будем ли делать к релизу или нет пока не знаю.