Хроники Yii3
615 subscribers
43 photos
1.68K links
Описание процесса разработки фреймворка из первых рук 😎

Обсуждение:
https://t.me/yii3ru

Сводка по всем пакетам:
https://www.yiiframework.com/status/3.0

Поддержать разработчиков:
https://opencollective.com/yiisoft
Download Telegram
#yiisoftI18n #ПатчРелиз #Релиз

🎁 Yii Internationalization Library 1.2.1

• Исправлена ошибка в LocaleProvider: метод isDefaultLocale() возвращал некорректное значение, если явно указать локаль, которая соответствует локали по умолчанию.
#yiisoftProxyMiddleware #FirstRelease #MajorRelease #Release

🎁 Proxy Middleware 1.0

Первая стабильная версия пакета Proxy Middleware. Пакет содержит middleware классы, связанные с прокси и реализующие PSR-15:

- TrustedHeaderProtocolResolver.
- TrustedHostsNetworkResolver.

Они были перенесены из пакета Yii Middleware и доработаны.

TrustedHeaderProtocolResolver

Устанавливает протокол в запросе сервера в соответствии со значением из специального доверяемого заголовка, такого, как например, X-Forwarded-Proto.

Вы можете использовать этот класс, если сервер находится за доверяемым балансировщиком нагрузки или прокси, которое постоянно устанавливает этот заголовок, игнорируя любые значения заголовков, переданных пользователем.

TrustedHostsNetworkResolver

Сканирует всю цепочку соединения и извлекает данные из forwarded заголовков с учётом доверяемых IP. В дополнении к этому, структура всех элементов проходит тщательную валидацию, потому что данным из заголовков нельзя доверять. Извлекаются следующие данные:

- IP.
- Протокол.
- Хост.
- Порт.
- Идентификатор IP - неизвестный или обфусцированный. Используется с RFC заголовком Forwarded.

Для forwarded заголовков можно использовать как одиночный заголовок Forwarded, стандартизированный в RFC 7239, так и группы заголовков, предоставляющих данные отдельно.

Типичная область применения - приложение за балансировщиком нагрузки.

Покрытие кода и MSI очень близко к 100%, статический анализ отвечает требованиям уровня 1 Psalm.
#yiisoftVarDumper #МинорныйРелиз #Релиз

🎁 Yii VarDumper 1.6

• В дампе анонимных функций удалены лишние пробелы.

• Реализован специализированный вывод дампа для объектов DateTime и DateTimeImmutable. Теперь это выглядит так:

new \DateTimeImmutable('2023-07-01T11:53:03.953+00:00', new \DateTimeZone('UTC'))
#yiisoftAuthJwt #ПатчРелиз #Релиз

🎁 Yii Auth JWT 2.0.1

• Явно прописаны зависимости psr/http-message, yiisoft/http и web-token/jwt-core.
#yiisoftStrings #МинорныйРелиз #Релиз

🎁 Yii Strings 2.2

• Добавлен класс CombinedRegexp, позволяющий оптимизировать сопоставление с несколькими регулярными выражениями. Также реализован класс MemoizedCombinedRegexp, работающий аналогично, но дополнительно кэширующий результаты сопоставления.

Подробнее о концепции можно почитать в блоге Никиты Попова: Fast request routing using regular expressions.

• В StringHelper добавлены методы trim(), ltrim() и rtrim(), позволяющие удалить все пробельные символы Unicode в начале/конце строки.

• В методе Inflector::toSnakeCase() добавлен булев параметр $strict, меняющий поведение метода:

- true (по умолчанию)
createMyDTOcreate_my_d_t_o

- false
createMyDTO
create_my_dto

В следующей мажорной версии пакета значение по умолчанию будет изменено на false.

• Минимальная версия PHP поднята до 8.0 и выполнен рефакторинг кода.

• Встроенные функции PHP теперь вызываются в корневом пространстве имён, что в некоторых случаях даёт выигрыш по производительности.
#yiisoftMiddlewareDispatcher #МинорныйРелиз #Релиз

🎁 Yii Middleware Dispatcher 5.2.0

• Добавлена возможность использовать классы, реализующие PSR-интерфейс RequestHandlerInterface, в качестве мидлварей.

• Добавлена возможность использовать классы с магическим методом __invoke() в качестве мидлварей.
#yiisoftYiiMiddleware #ПатчРелиз #Релиз

🎁 Yii Middleware 1.0.2

• В мидлвари CorsAllowAll добавлен заголовок Access-Control-Expose-Headers: *.

• В мидлвари Locale проверка игнорирования запроса перенесена в начало.

• В мидлвари Locale событие SetLocaleEvent и изменение локали в генераторе URL теперь происходит до вызова последующих мидлварей.
#yiisoftSockets

Yii Sockets

Новый пакет для кода, который будет работать с различными типами сокетов (udp, tcp, …). Сейчас такой функционал частично реализован в Yii VarDumper и требуется в debug-пакетах.
Please open Telegram to view this post
VIEW IN TELEGRAM
#yiisoftVarDumper #МинорныйРелиз #Релиз

🎁 Yii VarDumper 1.7

• Добавлены обработчики вывода дампа. Из коробки доступны:

- EchoHandler — вывод с помощью echo в стандартный поток вывода stdout (используется по умолчанию);

- StreamHandler — вывод с помощью json_encode в сокеты;

- CompositeHandler — выводы сразу в несколько обработчиков.

• Добавлена функция dump() (алиас к существующей ранее функции d()).
#yiisoftCacheFile #МинорныйРелиз #Релиз

🎁 Yii Cache File Handler 3.1

• В конструктор FileCache добавлен параметр $directoryMode (по умолчанию, 0755), позволяющий указать права на директорию с кэшем при её создании.

• Метод FileCache::withDirectoryMode() помечен устаревшим.

• Выполнен небольшой рефакторинг кода с использованием возможностей PHP 8.
#yiisoftRequestModel

Пакет Yii Request Model закрыт.

Предыстория

В пакетах Yii Request Model и Yii Form существовал функционал для создания и наполнения объектов. Каждый из пакетов делал это по своему.

В связи с этим в рамках отдельного пакета был написан Yii Hydrator, который умеет создавать и наполнять объекты. Также гидратор поддерживает настраиваемое приведение типов, PHP-атрибуты и разрешение зависимостей.

Дополнительно в отдельном пакете Yii Validating Hydrator создан валидирующий гидратор. По факту это декоратор над обычным гидратором, который выполняет валидацию после создания и наполнения объекта.

И, наконец, написан пакет Yii Input HTTP, который предоставляет дополнения к Yii Hydrator и Yii Middleware Dispatcher:

• модель запроса;
• атрибуты для гидратора, позволяющие получать данные из объекта запроса (Query, Body, UploadedFiles и т. д.);
• возможность использовать атрибуты гидратора для наполнения параметров в экшенах.

Таким образом функционал пакета Yii Request Model распределился по новым пакетам. А также мы получили PHP-атрибуты (Query, Body, UploadedFiles и т. д.), которые могут быть использованы:

• в параметрах экшена;
• внутри любого объекта при наполнении гидратором, в том числе и в моделях запроса или формы.
🍤 #Задачи

Потихоньку начали готовить шаблон API-приложения (yiisoft/app-api) к релизу. Конечно, предварительно нужно зарелизить ещё некоторые пакеты (отладка, гидратор и др.), но это не мешает вести работу и по шаблону.

Шаблон API-приложения, скорей всего, будет первым выпущенным шаблоном Yii3. Это будет ещё не большой релиз Yii3, но где-то рядом 😎

Есть несколько не сложных задач, с которыми вы при желании можете помочь.


⭐️ PHP Code Style Fixer в шаблоне API-приложения

yiisoft/app-api#184
Сейчас для автоматизации стиля кода используется StyleCI, но в шаблоне приложения хочется уйти от использования стороннего сервиса и заменить его на PHP CS Fixer. Нужно интегрировать фиксер в шаблон и добавить соответствующий GitHub экшн.


⭐️ Уровень Psalm в шаблоне API-приложения

yiisoft/app-api#182
Сейчас уровень 6й, нужно поднять до 1го, но это можно делать поэтапно и поднять до 5 или 4 — тоже будет полезно.


⭐️ Файл плана слияния конфигураций (Merge plan file)

yiisoft/config#121
В документации Yii Config нужно добавить несколько вещей. Первое, информацию о том, что файл плана слияния обновляется, в том числе, и при выполнении команды composer install. Второе, предупреждение о том, что файл плана слияния должен быть добавлен в .gitignore.
Please open Telegram to view this post
VIEW IN TELEGRAM
#yiisoftRouterComposerAttributeCollector

Yii Router Composer Attribute Collector

Сделали репозиторий под новый пакет, который реализует сборку роутов из классов, размеченных с помощью PHP-атрибутов. Сборка будет производится с помощью пакета olvlvl/composer-attribute-collector.

Сами атрибуты будут расположены в основном пакете Yii Router.

Собственно это всё уже почти реализовано в PR#196. Помимо атрибутов в роутере также будет добавлен интерфейс RoutesProviderInterface, реализации которого будут возвращать маршруты для роутера.
Please open Telegram to view this post
VIEW IN TELEGRAM
#yiisoftStrings #МинорныйРелиз #Релиз

🎁 Yii Strings 2.3

• Добавлена поддержка Stringable-объектов в методе NumericHelper::normalize().
#yiisoftAuth #МинорныйРелиз #Релиз

🎁 Yii Auth 3.1

• Добавлена мемоизация экземпляров WildcardPattern в мидлвари Authentication.

• Для свойства $pattern в методе HttpHeader::withPattern() прописан атрибут Language от JetBrains, что позволяет выводить значение этого свойства в PhpStorm c подсветкой синтаксиса и возможностью протестировать регулярное выражение.

• Исправлена ошибка с обработкой путей, содержащих не только ASCII-символы, в мидлвари Authentication.

• Добавлен коллектор для yiisoft/yii-debug.

• Минимальная версия PHP повышена до 8.0 и выполнен соответствующий рефакторинг.

• Обновлена версия зависимости yiisoft/http.

• Явно прописана зависимость от psr/http-factory.
#yiisoftStrings #ПатчРелиз #Релиз

🎁 Yii Strings 2.3.1

• Добавлена мемоизация в WildcardPatters, что позволило в некоторых случаях повысить скорость обработки при повторных вызовах более чем в 2 раза.
#yiisoftYiiEvent #МинорныйРелиз #Релиз

🎁 Yii Event 2.1

• В конфигурации пакета добавлена возможность через параметры указать имя группы конфигурации, содержащей события.
#yiisoftYiiConsole #ПатчРелиз #Релиз

🎁 Yii Console 2.1.1

• В конфигурации параметры перенесены из группы params в params-console.
#yiisoftDb #yiisoftDbPgsql #yiisoftDbMysql #yiisoftDbSqlite #yiisoftDbMssql #yiisoftDbOracle #МинорныйРелиз #Релиз

Минорные релизы Yii DB и адаптеров к основным СУБД с исправлением ошибок и несколькими улучшениями.


🎁 Yii Database 1.2

• Реализовано корректное экранирование имён общих табличных выражений (CTE).

• Выполнен рефакторинг классов Quoter и AbstractDMLQueryBuilder.

• Исправлены ошибки экранирования, выполняемого классом Quoter:

- для SQL содержащего имена таблиц с префиксами;

- в случае, когда используются различные кавычки для имён таблиц и имён столбцов;

- в случае, когда используется подзапрос с алиасом.

• В методе QueryBuilderInterface::batchInsert():

- исправлено приведение типа значения, если использовались строковые ключи в массиве значений
или имена колонок были указаны со скобками (например, {{%type}}.[[int_col]])

- исправлена ошибка, если порядок значений ассоциативного массива не совпадал с порядком колонок;

- изменён тип параметра $rows с iterable|Generator на iterable.

• Исправлена ошибка в методе QueryBuilderInterface::upsert(), возникающая в случае, если значение уникального столбца передано не первым значением.

protected-методы Command::getQueryBuilder() и Command::internalExecute() из адаптеров к конкретным СУБД были перенесены в AbstractPdoCommand.

• Метод TableSchemaInterface::compositeForeignKey() помечен устаревшим.

• Тип SchemaInterface::JSONB помечен устаревшим, вместо него предлагается использовать тип SchemaInterface::JSON.

• Debug-классы адаптированы к последним изменениям в Yii Debug.


🎁
Yii DB PostgreSQL Driver 1.2

• Выполнен рефакторинг классов JsonExpressionBuilder, ArrayExpressionBuilder и ColumnSchema.

• Исправлена конвертация для типов bit и varbit из строки для передачи в БД.

• Исправлено получение имени автоинкремента колонки.

• Выполнен рефакторинг с адаптацией к изменениям в Yii DB 1.2.


🎁 Yii DB MySQL Driver 1.1

• Оптимизирован метод QueryBuilderInterface::insert() для пустых значений, когда вставляются значения по умолчанию.

• Выполнен рефакторинг с адаптацией к изменениям в Yii DB 1.2.


🎁 Yii DB SQLite Driver 1.1

• Добавлена поддержка типа json.

• Исправлены ошибки с внешними ключами:

- когда таблица имеет несколько внешних ключей;

- если для внешних ключей не указаны колонки соответствия (используются первичные ключи).

• Выполнен рефакторинг с адаптацией к изменениям в Yii DB 1.2.


🎁 Yii DB MSSQL Server Driver 1.1

• Исправлена ошибка для рекурсивных общих табличных выражений (CTE).

• Исправлен тип колонки boolean с типа БД tinyint на более подходящий тип bit.

• Выполнен рефакторинг с адаптацией к изменениям в Yii DB 1.2.


🎁 Yii DB Oracle Driver 1.2

• Исправлена ошибка для рекурсивных общих табличных выражений (CTE).

• Улучшено определение типа колонки.

• Выполнен рефакторинг с адаптацией к изменениям в Yii DB 1.2.
🔥 #Новости

Дмитрий Дерепко (xepozz) из core-команды Yii запустил личный телеграм-канал «Хэндлим тему», где планирует делиться полезной информацией по развитию себя, как профессионала в разработке, менеджменте и т. д.

🌿 https://t.me/handle_topic