⚡️ #yiisoftDb #yiisoftDbSqlite #yiisoftDbMysql #yiisoftDbMssql #yiisoftDbOracle #yiisoftDbPgsql
Несколько изменений со сломом публичного API в пакете Yii DB (PR):
• Удалили интерфейс
• Вместо
• Сделали рефакторинг абстрактного класса
Соответствующие изменения внесли в пакеты-адаптеры к конкретным БД:
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).
Несколько изменений со сломом публичного 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).
⚡️ #yiisoftRbac #yiisoftRbacPhp #yiisoftDemo
Продолжаем рефакторинг Yii Role-Based Access Control (PR).
•
• В интерфейсе
Соответствующие изменения внесены в Yii RBAC PHP File Storage (PR) и демо веб-приложения (PR).
Продолжаем рефакторинг 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 $itemName
→ string $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.
•
• В индексные данные
• В индексные данные
Несколько изменений в Yii Debug (PR):
• Стиль именования ключей в отладочной информации изменён на camelCase.
•
EventCollector
, LogCollector
, MiddlewareCollector
и ServiceCollector
теперь дополнительно реализуют интерфейс IndexCollectorInterface
.• В индексные данные
RouterCollector
добавлено имя текущего маршрута.• В индексные данные
ConsoleAppInfoCollector
добавлена версия PHP.👍3
⚡️ #yiisoftView
В пакете Yii View перенесли язык и тему в состояние сервисов
Соответственно переименовали методы:
В пакете Yii View перенесли язык и тему в состояние сервисов
View
и WebView
, сохраняемое при клонировании (PR, PR).Соответственно переименовали методы:
withTheme()
→ setTheme()
withLanguage()
→ setLanguage()
👍1
⚡️ #yiisoftForm
Несколько улучшений в Yii Form:
• У полей добавлен метод
• Актуализированы примеры в документации и улучшены описания в doc-блоках (PR).
Несколько улучшений в Yii Form:
• У полей добавлен метод
replaceIndividualToken()
(PR).• Актуализированы примеры в документации и улучшены описания в doc-блоках (PR).
⚡️ #yiisoftApp
В шаблоне веб-приложения убрали зависимость от Yii Bulma и немного изменили оформление стартовой страницы (PR).
В шаблоне веб-приложения убрали зависимость от Yii Bulma и немного изменили оформление стартовой страницы (PR).
👍4🤔4😱2
#yiisoftView #МажорныйРелиз #Релиз
🎁 Yii View 5.0.0
• Добавлено состояние сервисов
Состояние
Для клонирования
• Добавлены методы
• Добавлены методы
• В интерфейсе
• Доработан текучий интерфейс во
• В конфигурации пакета исправлена функция сброса состояния объектов: теперь после сброса в сервисы
🎁 Yii View 5.0.0
• Добавлено состояние сервисов
View
и WebView
, которое сохраняется при клонировании самих сервисов (в том числе когда используются методы with*()
), то есть клонированный объект будет использовать те же данные, что и исходный. Это позволяет, например, получить WebView
в контроллере из контейнера с помощью DI и изменить его контекст:final class BlogController {... а затем зарегистрировать CSS в виджете:
private WebView $view;
public function __construct (WebView $view) {
$this->view = $view->withContextPath(__DIR__.'/views');
}
}
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
⚡️ #yiisoftYiiDebugViewer #yiisoftDemo
Порефакторили Yii Debug Viewer и добавили тулбар, который можно добавить в приложение с помощью новой мидлвари
Тулбар уже добавлен в демо веб-приложения (PR).
Порефакторили Yii Debug Viewer и добавили тулбар, который можно добавить в приложение с помощью новой мидлвари
ToolbarMiddleware
(PR, PR).Тулбар уже добавлен в демо веб-приложения (PR).
👍8
#yiisoftYiiView #ПатчРелиз #Релиз
🎁 Yii View Extension 4.0.3
• Добавлена поддержка
🎁 Yii View Extension 4.0.3
• Добавлена поддержка
yiisoft/view
версии 5.0 (PR).#yiisoftMailer #ПатчРелиз #Релиз
🎁 Yii Mailer Library 3.0.3
• Добавлена поддержка
🎁 Yii Mailer Library 3.0.3
• Добавлена поддержка
yiisoft/view
версии 5.0 (PR).#yiisoftErrorHandler #ПатчРелиз #Релиз
🎁 Yii Error Handler 2.0.2
• Исправлен JSON-рендеринг в случае, когда брошено исключение о рекурсии, для этого в функции
🎁 Yii Error Handler 2.0.2
• Исправлен JSON-рендеринг в случае, когда брошено исключение о рекурсии, для этого в функции
json_encode
заменили опцию JSON_THROW_ON_ERROR
на JSON_PARTIAL_OUTPUT_ON_ERROR
(PR).👍1
⚡️ #yiisoftRbac #yiisoftRbacPhp
В интерфейсе
Соответствующим образом адаптировали хранилище Yii RBAC PHP File Storage (PR).
В интерфейсе
ItemsStorageInterface
пакета Yii Role-Based Access Control заменили метод getAllChildren()
на getParents()
(PR).Соответствующим образом адаптировали хранилище Yii RBAC PHP File Storage (PR).
⚡️ #yiisoftYiiDbMigration
В пакете Yii DB Migration добавили поддержку Yii View версии 5.0 и адаптировали тесты к PHP 8.1 (PR).
В пакете Yii DB Migration добавили поддержку Yii View версии 5.0 и адаптировали тесты к PHP 8.1 (PR).
⚡️ #yiisoftDemo
Демо веб-приложения переехало на Cycle ORM 2, а также заменили аннотации на атрибуты (PR).
Демо веб-приложения переехало на Cycle ORM 2, а также заменили аннотации на атрибуты (PR).
#yiisoftSession #ПатчРелиз #Релиз
🎁 Yii Session 1.0.4
• Исправлено: не устанавливалась кука в случаях, когда сессия закрывалась вручную (PR).
🎁 Yii Session 1.0.4
• Исправлено: не устанавливалась кука в случаях, когда сессия закрывалась вручную (PR).
⚡️ #yiisoftValidator
Улучшили валидацию вложенных данных в Yii Validator (PR):
• В классе результата валидации
-
-
Пример:
Скорей всего, в дальнейшем
Улучшили валидацию вложенных данных в Yii Validator (PR):
• В классе результата валидации
Result
(объекты этого класса возвращают правила валидации) добавлены новые методы:-
getErrorObjects()
— возвращает массив объектов Error
, из которых можно получить текст ошибки и атрибут (в виде пути, учитывающего вложенность) к которому он относится;-
getErrorsIndexedByPath()
— возвращает массив, где ключи — это атрибуты в виде пути с точкой в качестве разделителя, а значения — массив строк с ошибками, относящимися к этому атрибуту.Пример:
use Yiisoft\Validator\Rule\Each;В результате переменная
use Yiisoft\Validator\Rule\Nested;
$data = [
'charts' => [
[
'points' => [
['coordinates' => ['x' => -11, 'y' => 11], 'rgb' => [-1, 256, 0]],
['coordinates' => ['x' => -12, 'y' => 12], 'rgb' => [0, -2, 257]]
],
],
[
'points' => [
['coordinates' => ['x' => -1, 'y' => 1], 'rgb' => [0, 0, 0]],
['coordinates' => ['x' => -2, 'y' => 2], 'rgb' => [255, 255, 255]],
],
],
[
'points' => [
['coordinates' => ['x' => -13, 'y' => 13], 'rgb' => [-3, 258, 0]],
['coordinates' => ['x' => -14, 'y' => 14], 'rgb' => [0, -4, 259]],
],
],
],
];
$rule = Nested::rule([
'charts' => Each::rule(new Rules([
Nested::rule([
'points' => Each::rule(new Rules([
Nested::rule([
'coordinates' => Nested::rule([
'x' => [Number::rule()->min(-10)->max(10)],
'y' => [Number::rule()->min(-10)->max(10)],
]),
'rgb' => Each::rule(new Rules([
Number::rule()->min(0)->max(255)->skipOnError(false),
])),
])->skipOnError(false),
])),
])->skipOnError(false),
])),
]);
$errors = $rule->validate($data)->getErrorsIndexedByPath();
$errors
будет содержать вот такой массив:$errors = [• В классе
'charts.0.points.0.coordinates.x' => ['Value must be no less than -10.'],
// ...
'charts.0.points.0.rgb.0' => ['Value must be no less than 0. -1 given.'],
// ...
];
ResultSet()
(объект этого класса возвращает валидатор, как результат валидации) также добавлены методы getErrorObjects()
и getErrorsIndexedByPath()
, они возвращают те же данные, что и в классе Result
, но с разбивкой по атрибутам верхнего уровня.Скорей всего, в дальнейшем
ResultSet
и Result
будут объединены в один класс и как правила валидации, так и валидатор в качестве результата валидации будут возвращать объекты одного класса.👍7
⚡️ #yiisoftValidator
В правиле валидации
В правиле валидации
MatchRegularExpression
из пакета Yii Validator добавлена проверка на тип проверяемого значения, оно должно быть строкой (PR).⚡️ #yiisoftValidator
В пакете Yii Validator удалили класс
В пакете Yii Validator удалили класс
ResultSet
, теперь валидатор и правила валидации возвращают экземпляр класса Result
(PR).⚡️ #yiisoftYiiSwagger
В пакете Yii Swagger в сервисе
В пакете Yii Swagger в сервисе
\Yiisoft\Swagger\Service\SwaggerService
добавлен метод withOptions()
, позволяющий задать конфигурацию объекта \OpenApi\Annotations\OpenAPI
создаваемого этим сервисом (PR, PR).