⚡️ #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).#yiisoftYiiSwagger #МинорныйРелиз #Релиз
🎁 Yii Swagger 1.2.0
• В сервисе
🎁 Yii Swagger 1.2.0
• В сервисе
\Yiisoft\Swagger\Service\SwaggerService
добавлен метод withOptions()
, позволяющий задать конфигурацию объекта \OpenApi\Annotations\OpenAPI
создаваемого этим сервисом. Конфигурация объекта OpenAPI
также доступна через параметры пакета в config/params.php
:'yiisoft/yii-swagger' => [
// Default values are specified.
'open-api-options' => [
'aliases' => OpenApi\Generator::DEFAULT_ALIASES,
'namespaces' => OpenApi\Generator::DEFAULT_NAMESPACES,
'analyser' => null,
'analysis' => null,
'processors' => null,
'logger' => null,
'validate' => true,
'version' => OpenApi\Annotations\OpenApi::DEFAULT_VERSION,
],
],
//...