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

Обсуждение:
https://yangx.top/yii3ru

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

Поддержать разработчиков:
https://opencollective.com/yiisoft
加入频道
#yiisoftYiiRunnerRoadrunner #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii RoadRunner Runner 1.0.0

Адаптер раннера для RoadRunner, позволяет запустить приложение буквально в несколько строчек кода:

<?php

declare(strict_types=1);

use Yiisoft\Yii\Runner\RoadRunner\RoadRunnerApplicationRunner;

ini_set('display_errors', 'stderr');

require_once __DIR__ . '/autoload.php';

(
new RoadRunnerApplicationRunner(
__DIR__,
$_ENV['YII_DEBUG'],
$_ENV['YII_ENV']
)
)->run();

Подробнее об использовании Yii в долгоживущих приложениях, работающих в event loop, можно почитать в документации: Using Yii with event loop.
👍1
⚡️ Во все пакеты, использующие GitHub Actions, добавили тестирование на PHP 8.1. В некоторых пакетах тесты не прошли, будем исправлять.
#yiisoftErrorHandler #ПатчРелиз #Релиз

🎁 Yii Error Handler 2.0.1

• Исправили ошибку, возникающую при использовании JSON-рендеринга для ошибок, содержащих некорректные UTF-8 символы (PR).
#yiisoftNetworkUtilities #ПатчРелиз #Релиз

🎁 Yii Network Utilities 1.0.1

• Исправили тип возвращаемый функцией обратного вызова передаваемой в set_error_handler() в методах DnsHelper::existsMx() и DnsHelper::existsA() (PR).
⚡️ #yiisoftForm

В пакете Yii Form добавили виджет Fieldset (PR).
⚡️ #yiisoftArrays

Для большей ясности переписали описание метода ArrayHelper::getObjectVars() в пакете Yii Arrays (PR).
⚡️ #yiisoftArrays #yiisoftJson #yiisoftSession #yiisoftDbMssql

Исправили проблемы работы с PHP 8.1 в пакетах:

Yii Arrays (PR),
Yii JSON (PR),
Yii Session (PR),
Yii DB MSSQL Server Extension (PR).

Основная проблема — атрибут ReturnTypeWillChange, который появился в PHP 8.1.
#yiisoftCacheWincache #ПатчРелиз #Релиз

🎁 Yii Cache WinCache Handler 1.0.1

• Убрали поддержку PHP 8 и выше, так как PHP-расширение WinCache на текущий момент доступно только для PHP 7.4 (PR).
⚡️ Во всех пакетах форсировали использование окончания строк LF, добавив соответствующую опцию в файл .gitattributes.

Подробнее можно почитать в документации GIT и статье Александра Макарова «Форсируем LF для всего проекта».
#yiisoftSession #ПатчРелиз #Релиз

🎁 Yii Session 1.0.3

• В конфигурации класса Session добавлен сброс состояния: выполняется закрытие сессии и сбрасывается её ID.
⚡️ #yiisoftCacheDb

В пакете Yii Cache DB Handler адаптировали тесты и конфигурацию CI к PHP 8.1 (PR).
⚡️ #yiisoftRbacPhp

Исправили ошибку, возникающую при использовании числовых ID пользователя в пакете Yii RBAC PHP File Storage (commit).
⚡️ #yiisoftRbac #yiisoftRbacPhp

Выполнили рефакторинг интерфейса хранилища назначений ролей/прав пользователям AssignmentsStorageInterface в пакете Yii Role-Based Access Control (PR):

• сделали более консистентные и понятные имена методов;

• в аргументах методов заменили объекты ролей/прав на их имена.

Соответствующим образом изменили реализацию хранилища в Yii RBAC PHP File Storage (PR).
⚡️ #yiisoftDb #yiisoftDbSqlite #yiisoftDbMysql #yiisoftDbMssql #yiisoftDbOracle #yiisoftDbPgsql

Несколько изменений со сломом публичного API в пакете Yii DB (PR):

• Удалили интерфейс ConstraintFinderInterface и трейт для его реализации ConstraintFinderTrait.

• Вместо ConstraintFinderInterface добавили новый интерфейс схемы SchemaInterface, куда также переехали все константы типов полей.

• Сделали рефакторинг абстрактного класса Schema (переработали код для получения метаданных, добавили методы, необходимые для SchemaInterface, и др.).

Соответствующие изменения внесли в пакеты-адаптеры к конкретным БД:

Yii DB SQLite Extension (PR, PR, PR, PR),
Yii DB MySQL Extension (PR, PR, PR),
Yii DB MSSQL Server Extension (PR, PR),
Yii DB Oracle Extension (PR),
Yii DB PostgreSQL Extension (PR).
⚡️ #yiisoftData

В пакете Yii Data подчистили и адаптировали тесты к PHP 8.1 (PR).
⚡️ #yiisoftRbac #yiisoftRbacPhp #yiisoftDemo

Продолжаем рефакторинг Yii Role-Based Access Control (PR).

RolesStorageInterface переименован в ItemsStorageInterface, а также переименованы методы:
getItems()getAll()
getItemByName()
get()
addItem()
add()
updateItem()
update()
removeItem()
remove()
getChildren()
getAllChildren()
getRoleByName()
getRole()
getPermissionByName()
getPermission()
getChildrenByName()
getChildren()
getRuleByName()
getRule()

• В методах removeChildren(), removeChild(), addChild() и remove() интерфейса ItemsStorageInterface в качестве аргументов вместо объектов элементов RBAC теперь используются их имена.

• В интерфейсе AssignmentsStorageInterface переименованы методы:
getUserAssignments()getByUserId()
removeUserAssignments()
removeByUserId()
removeItemAssignments()
removeByItemName()

• В методах get(), add() и remove() интерфейса AssignmentsStorageInterface изменён порядок методов:
string $userId, string $itemNamestring $itemName, string $userId

• В RBAC-менеджере Manager объекты элементов RBAC заменены на их имена в качестве аргументов в следующих методах:
canAddChild()
addChild()
removeChild()
removeChildren()
hasChild()
assign()
revoke()
removeRole()
removePermission()

• В RBAC-менеджере Manager переименованы методы:
getUserIdsByRole()getUserIdsByRoleName()
getPermissionsByUser()
getPermissionsByUserId
getPermissionsByRole()
getPermissionsByRoleName()
getRolesByUser()
getRolesByUserId()

• Исправлена ошибка в методе Manager::getDefaultRoles(): теперь возвращаются роли из хранилища, а не создаются новые.

Соответствующие изменения внесены в Yii RBAC PHP File Storage (PR) и демо веб-приложения (PR).
👍4
⚡️ #yiisoftYiiDebug

Несколько изменений в Yii Debug (PR):

• Стиль именования ключей в отладочной информации изменён на camelCase.

EventCollector, LogCollector, MiddlewareCollector и ServiceCollector теперь дополнительно реализуют интерфейс IndexCollectorInterface.

• В индексные данные RouterCollector добавлено имя текущего маршрута.

• В индексные данные ConsoleAppInfoCollector добавлена версия PHP.
👍3
⚡️ #yiisoftView

В пакете Yii View перенесли язык и тему в состояние сервисов View и WebView, сохраняемое при клонировании (PR, PR).

Соответственно переименовали методы:
withTheme()setTheme()
withLanguage()
setLanguage()
👍1
⚡️ #yiisoftForm

Несколько улучшений в Yii Form:

• У полей добавлен метод replaceIndividualToken() (PR).

• Актуализированы примеры в документации и улучшены описания в doc-блоках (PR).
⚡️ #yiisoftApp

В шаблоне веб-приложения убрали зависимость от Yii Bulma и немного изменили оформление стартовой страницы (PR).
👍4🤔4😱2
#yiisoftView #МажорныйРелиз #Релиз

🎁 Yii View 5.0.0

• Добавлено состояние сервисов View и WebView, которое сохраняется при клонировании самих сервисов (в том числе когда используются методы with*()), то есть клонированный объект будет использовать те же данные, что и исходный. Это позволяет, например, получить WebView в контроллере из контейнера с помощью DI и изменить его контекст:

final class BlogController {
private WebView $view;
public function __construct (WebView $view) {
$this->view = $view->withContextPath(__DIR__.'/views');
}
}

... а затем зарегистрировать CSS в виджете:

final class LastPosts extends Widget 
{
private WebView $view;
public function __construct (WebView $view) {
$this->view = $view;
}
protected function run(): string
{
...
$this->view->registerCss('.lastPosts { background: #f1f1f1; }');
...
}
}

Состояние View включает в себя: параметры, блоки, тему и язык.

Состояние WebView включает в себя: параметры, блоки, тему, язык, заголовок страницы, meta- и link-теги, JS/CSS строки и JS/CSS файлы.

Для клонирования View или WebView вместе с состоянием можно использовать метод withClearedState(), который дополнительно очищает клонированное состояние объекта:

$view = $view->withClearedState();

• Добавлена простая реализация интерфейса ViewContextInterface — класс ViewContext, который принимает в конструкторе путь к контексту.

• Добавлены методы View::withContextPath() и WebView::withContextPath() позволяющие задать контекст в виде пути к папке с представлениями.

• Добавлены методы View::addToParameter() и WebView::addToParameter(), которые позволяют добавить новый элемент к параметру, являющемся массивом. Эти методы удобно использовать, например, для «хлебных крошек»:

// Добавить крошки в представлении
$this->addToArrayParameter('breadcrumbs', $item1, $item2);

• В интерфейсе ViewInterface и его реализациях View и WebView мутабельный метод setPlaceholderSalt() заменён на иммутабельный withPlaceholderSalt().

• В интерфейсе ViewInterface и его реализациях View и WebView иммутабельные методы withTheme() и withLanguage() заменены на мутабельные, соответственно setTheme() и setLanguage().

• Доработан текучий интерфейс во ViewInterface, View и WebView: теперь все сеттеры (регистрация CSS/JS, удаление параметра, удаление блока и прочие) возвращают сам объект.

• В конфигурации пакета исправлена функция сброса состояния объектов: теперь после сброса в сервисы View и WebView добавляются параметры по-умолчанию.
👍4