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

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

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

Поддержать разработчиков:
https://opencollective.com/yiisoft
Download Telegram
#yiisoftRbac #yiisoftRbacPhp #yiisoftRbacCycleDb #yiisoftRbacDb #МажорныйРелиз #МинорныйРелиз #Релиз

Большой релиз RBAC пакетов

RBAC пакеты получили большое обновление:

- 🎁 RBAC 2.0
- 🎁 RBAC PHP Storage 2.0
- 🎁 RBAC Cycle Database Storage 3.0
- 🎁 RBAC Yii Database Storage 2.0
- 🎁 RBAC Rules Container 2.1

Рассказываем, что было исправлено и появилось нового.

Поднятие версии PHP

Подняли минимальную версию PHP во всех RBAC пакетах до 8.1.

Качество кода

Повысили качество кода согласно установленным стандартам во всех пакетах:

- 1й уровень в статическом анализаторе Psalm.
- 100% покрытие кода юнит тестами.
- 100% в мутационном тестировании.

Использование хранилищ через Manager

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

В частности, убрана связность хранилищ (это было более актуально для реализаций на основе БД). То есть теперь можно
полноценно использовать разные комбинации хранилищ, как и задумывалось изначально. Такое было возможно и в Yii 2. Один
из частых кейсов - когда права и роли хранятся в PHP файле (обновляются реже), а назначения - в базе данных (обновляются
чаще).

Также проведена масштабная оптимизация производительности.

Проверка прав доступа

- Исправлена проблема, когда правила не выполнялись для гостей и других элементов в ветви дерева иерархии.
- Теперь можно проверять наличие у пользователя не только прав, но и ролей.
- Право теперь разрешается для пользователя при наличии доступа хотя бы по одной ветви иерархии доступа.

Простые реализации хранилищ

Добавлены простые реализация хранилищ. Главная их особенность - наполнение свойств соответствующего класса при
считывании из хранилищ и дальнейшее продолжение работы уже со свойствами. Помимо полноценного тестирования базового
пакета (он не может быть использован отдельно), это позволило избавиться от повторяющегося кода в PHP реализации (с
соответствующими доработками для конкуретности).

Специфические изменения для разных реализаций хранилищ

Хранилище RBAC PHP

- Добавлена поддержка конкурентности, что может быть полезно при одновременном редактировании файла.
- Исправлены проблемы с сохранением времени создания и редактирования прав / ролей и назначений.
- Немного упростили процесс указания файла при конфигурировании хранилищ.

Сохранена возможность ручного редактирования файла. Заметьте, что в этом случае вам нужно вручную синхронизировать
изменения в другом хранилище. Если предпочтение отдаётся этому способу - опциональные поля можно не указывать, как и
временные метки - в случае их отсутствия будет выполен fallback на дату изменения файла. Дата изменения файла теперь
тоже кастомизируется. Помимо временных меток, её изменение является триггером к обновлению данных при включённом режиме
обработки конкуретности.

Хранилища RBAC Cycle DB & RBAC Yii DB

Оптимизация производительности

Помимо оптимизации в базовом пакете, проведена оптимизация, специфическая для БД.

Миграции

Мы наконец-то определились, как будут выполняться миграции. Решили отказаться от экспериментальных подходов с чистым
SQL, CLI и использовать соответствующие пакеты - Cycle Migrations и
Yii DB Migration (тем более, что последний не так давно получил первую
стабильную версию).

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

Также была облегчена миграция существующих данных с Yii 2 путём сохранения оригинальных имён свойств сущностей,
насколько это возможно.
🔥23👍3
Все таблицы теперь по умолчанию имеют префикс yii для предотвращения потенциальных коллизий имён с пользовательскими
таблицами и более лёгкой идентификации. Подобный подход планируем внедрить и в остальные зависимые от БД пакеты.

В хранилищах добавлены названия таблиц по умолчанию для упрощения конфигурации.

Транзакции

Добавлен декоратор для Manager, гарантирующий целостность данных при изменениях одновременно в разных хранилищах, в
частности обновлении прав и ролей.

С полным списком изменений можно ознакомиться в CHANGELOG:

- RBAC
- RBAC PHP Storage
- RBAC Cycle Database Storage
- RBAC Yii Database Storage
- RBAC Rules Container
👍19🔥3
#yiisoftInputHttp #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Input HTTP 1.0

Yii Input HTTP позволяет взаимодействовать с DTO с атрибутами, наподобие такого:

use Yiisoft\Input\Http\AbstractInput;
use Yiisoft\Input\Http\Attribute\Data\FromBody;

#[FromBody]
final class UpdatePostInput extends AbstractInput
{
public int $id;
public string $title;
public string $description = '';
public string $content;
}


Возможно его автоматически зарезолвить и гидрировать, например для таких аргументов:

final class UpdatePostController
{
public function update(UpdatePostInput $post): ResponseInterface
{
// ...

/** @var ResponseInterface $response */
return $response;
}
}


Базовые шаги:

- Подключить и сконфиругировать провайдер запроса.
- Сконфигурировать резолвер параметров.
- Создать DTO для входных данных запроса.
- Проставить атрибуты гидратора, предоставляемые этим пакетом, для свойств DTO.
- Добавить название класса DTO как тип аргумента метода класса, где вы хотите, чтобы он зарезолвился.

Для других доступных опций, см. руководство.
🔥11
🔥 #Новости

Сегодня состоялся релиз 100го пакета Yii3.

Сто стабильных пакетов!
Большой релиз Yii3 неизбежен 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥439👍7🤪3❤‍🔥2
#yiisoftYiiRunner #МинорныйРелиз #Релиз

🎁 Yii Runner 2.2

• Добавлена возможность указать путь к папкам vendor и config, а также расположение файла с планом слияния конфигурации (merge plan).
👍6👾1
#yiisoftYiiRunnerConsole #МинорныйРелиз #Релиз

🎁 Yii Console Runner 2.2

• Добавлена возможность указать путь к папкам vendor и config, а также расположение файла с планом слияния конфигурации (merge plan).
👍3👾1
#yiisoftYiiRunnerHttp #МинорныйРелиз #Релиз

🎁 Yii HTTP Runner 2.3

• Добавлена возможность указать путь к папкам vendor и config, а также расположение файла с планом слияния конфигурации (merge plan).

• Реализована отправка заголовков перед отправкой тела ответа, что позволяет клиенту распознать тип содержимого, если оно отправляется с задержкой, например, при использовании потоков.

• В SapiEmitter, ecли содержимое для вывода меньше, чем размер буфера, то буферизированный вывод не используется, что позволяет сократить выделение памяти в таких случаях.

• Добавлена поддержка пакета psr/http-message версии ^2.0.
👍7👾1
#yiisoftDefinitions #МинорныйРелиз #Релиз

🎁 Yii Definitions 3.3

• В определениях в формате массива добавлена возможность вызвать один и тот же метод несколько раз. Для этого в ключе после () нужно добавить любой постфикс. Например:

[
'class' => Collector::class,
'add()' => ['Alex'],
'add()-2' => ['Mike'],
]


• Исправлена фатальная ошибка, возникающая при использовании пересечений типов.
👍5🤔1🤯1👾1
#yiisoftSecurity #ПатчРелиз #Релиз

🎁 Yii Security 1.0.2

• В методе Random::string() указан более точный psalm-тип non-empty-string.

• Явно прописаны зависимости ext-hash и ext-openssl.
👾4👍3
#yiisoftRouterFastroute #МинорныйРелиз #Релиз

🎁 Yii Router FastRoute Adapter 3.1

• В конструктор класса UrlGenerator добавлены опциональные параметры $scheme и $host, с помощью которых можно задать значения по умолчанию для схемы и хоста соответственно.

• Добавлена поддержка пакета psr/http-message версии ^2.0.
👍2👾1
#yiisoftDb #yiisoftDbPgsql #yiisoftDbMysql #yiisoftDbSqlite #yiisoftDbMssql #yiisoftDbOracle #МинорныйРелиз #Релиз

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


🎁 Yii Database 1.3

• В контекст лога добавлен тип сообщения.

• Разрешено использование метода DMLQueryBuilderInterface::batchInsert() без указания колонок.

• Добавлен метод DbStringHelper::isReadQuery().

• Исправлено: метод Query::count() возвращал некорректное значение, если результат больше PHP_INT_MAX.

• Исправлена ошибка, возникающая в методе AbstractCommand::getRawSql(), если используется параметр со Stringable значением.

• Исправлено приведение числа к строке в методе AbstractCommand::getRawSql().

• Исправлена ошибка при изменении префикса в AbstractConnection.

• Уточнены psalm-типы.

• Методы помечены устаревшими:
- AbstractSchema::normalizeRowKeyCase()
- SchemaInterface::getRawTableName()
- Quoter::getRawTableName()
- SchemaInterface::isReadQuery()

• Параметр $rawSql в методе AbstractCommand::internalExecute() помечен устаревшим.

• Оптимизация производительности и рефакторинг.

Подробный список изменений тут.


🎁
Yii DB PostgreSQL Driver 1.3

• Добавлена поддержка составных (structured) типов.

• Добавлена поддержка ограничений (constraints) в представлениях (table view).

• Свойство Schema::$typeMap заменено на константу Schema::TYPE_MAP.

• Исправлено: в редких кейсах при чтении индекса в индекс попадали поля, которых там быть не должно.

• Оптимизация производительности и рефакторинг.


🎁 Yii DB MySQL Driver 1.2

• Свойство Schema::$typeMap заменено на константу Schema::TYPE_MAP.

• Исправлена ошибка при использовании метода Command::insertWithReturningPks() с пустыми значениями.

• Оптимизация производительности и рефакторинг.


🎁 Yii DB SQLite Driver 1.2

• Свойство Schema::$typeMap заменено на константу Schema::TYPE_MAP.

• Оптимизация производительности и рефакторинг.


🎁 Yii DB MSSQL Server Driver 1.2

• Свойство Schema::$typeMap заменено на константу Schema::TYPE_MAP.

• Исправлены ошибки в методах Command::insertWithReturningPks() и DMLQueryBuilder::insertWithReturningPks(), возникающие в редких кейсах.

• Оптимизация производительности и рефакторинг.


🎁 Yii DB Oracle Driver 1.3

• Разрешено использование метода DMLQueryBuilderInterface::batchInsert() без указания колонок.

• Свойство Schema::$typeMap заменено на константу Schema::TYPE_MAP.

• Исправлена ошибка, возникающая при использовании Query без указания FROM.

• Исправлена ошибка при использовании метода Command::insertWithReturningPks() с таблицей без первичного ключа.

• Исправлено: метод Schema::getTableSequenceName() теперь возвращает null вместо пустой строки.

• Оптимизация производительности и рефакторинг.
👍5🔥2👾1
#yiisoftCycle #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Cycle 1.0

В релиз ушёл ещё 1 пакет. На этот раз это обертка над Cycle ORM для Yii экосистемы. Cycle известен поддержкой как классических, так и демонизированных приложений на основе, например, RoadRunner.

Пакет предлагает набор консольных команд и инструментов для удобства работы с миграциями и схемами баз данных.

Незадолго до релиза было принято решение часть, связанную с адаптацией Yii Data, вынести в отдельный пакет - Yii Data Cycle, по аналогии с Yii Data DB. Все они также в шаге от релиза. После Yii Data 2.0 последуют первые релизы пакетов-адаптеров.

Хотели бы напомнить, что использование Yii Cycle в демо не означает, что это рекомендованный инструмент / пакет по умолчанию для работы с БД. Вы также можете выбрать, например, Yii DB.

Покрытие тестами, мутационный индекс и уровень статического анализа подтянули до максимума.
👍10🔥74
#yiisoftQueueDb

Yii Queue DB

Новый пакет, в котором планируется реализовать Yii Queue адаптер для работы очередей через базу данных c помощью Yii DB.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👾1
#yiisoftHydrator #МинорныйРелиз #Релиз

🎁 Yii Hydrator 1.2

• Добавлен PHP атрибут ToDateTime для приведения значения к объекту DateTimeImmutable или DateTime.

• Добавлены PHP атрибуты для удаления пробелов (или других символов) в начале и/или конце строки:
- Trim
- LeftTrim
- RightTrim

• Минимальная версия PHP повышена до 8.1.
👍14👾2
#yiisoftArrays #МинорныйРелиз #Релиз

🎁 Yii Arrays 3.1

• Добавлен метод ArrayHelper::renameKey() для переименования ключа в массиве.

• Добавлен метод ArrayHelper::parametrizedMerge(), позволяющий рекурсивно слить два или более массивов с заданным уровнем вложенности.

• В методе ArrayHelper::getObjectVars() уточнён тип результата: array|nullarray.

• Выполнен небольшой рефакторинг в ArrayableTrait.
🔥8👍1👾1
#yiisoftValidator #МинорныйРелиз #Релиз

🎁 Yii Validator 1.3

• Добавлено правило Image для валидации размеров изображения.

• Добавлены правила Date, DateTime и Time для валидации даты/времени.

• В классе Result добавлены методы addErrorWithFormatOnly() и addErrorWithoutPostProcessing().

• Уточнены psalm-типы в классе Result.
👍10👾1
#yiisoftCookies #ПатчРелиз #Релиз

🎁 Yii Cookies 1.2.2

• Добавлена поддержка пакета psr/http-message версии ^2.0.
👍9👾2
🔥 #Новости

Одним из источников пополнения фонда Yii является сервис Tidelift. Недавно руководство сервиса решило существенно сократить выплаты разработчикам PHP-пакетов, что по итогу привело к снижению на ~35% поступлений в наш фонд.

Из фонда Yii финансируется вся разработка фреймворка. Несмотря на уменьшение поступлений, работа будет продолжена, но поддержка, конечно, не будет лишней.

Вы можете поддержать нас финансово на следующих площадках:

⭐️ sponsr

⭐️ boosty

⭐️ Open Collective

Возможно, ваша компания использует фреймворк Yii и неё появится желание в какой-то мере проспонсировать разработку (хорошая идея — обсудить это с руководством 😎). В свою очередь, мы можем рассказать о компании-спонсоре на ресурсах Yii, что положительно скажется на репутации в среде разработчиков.

И ещё напомню, что подписчики на sponsr и boosty получают доступ к закрытому чату с разработчиками Yii3 в Telegram, где можно будет узнать эксклюзивные подробности о процессе разработки и обсудить идеи дальнейшего развития фреймворка.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7🤔2👍1👾1
#yiisoftCacheApcu #МинорныйРелиз #Релиз

🎁 Yii Cache Library - APCu Handler 1.1

• Подняты минимальные версии зависимостей: psr/simple-cache - до ^2.0|^3.0, а PHP - до ^8.0.
🔥4👍1😐1
#yiisoftSession #МинорныйРелиз #Релиз

🎁 Yii Session 2.1

• Добавлена поддержка пакета psr/http-message версии ^2.0.

• Минимальная версия PHP поднята до 8.0.
👍2👾2