⚡️ #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,
],
],
//...
⚡️ Во всех пакетах добавили разрешенные плагины (
• во всех пакетах разрешены плагины
• дополнительно в раннерах разрешён плагин
• дополнительно в демо- и шаблонах приложений разрешены плагины
До июля 2022 года composer по умолчанию разрешает установку любых composer-плагинов, затем будут разрешены только плагины указанные в
allow-plugins
) в секцию конфигурации composer.json
:• во всех пакетах разрешены плагины
infection/extension-installer
и composer/package-versions-deprecated
;• дополнительно в раннерах разрешён плагин
yiisoft/config
;• дополнительно в демо- и шаблонах приложений разрешены плагины
codeception/c3
и yiisoft/config
.До июля 2022 года composer по умолчанию разрешает установку любых composer-плагинов, затем будут разрешены только плагины указанные в
composer.json
в секции config
→ allow-plugins
(см. документацию composer).👍3
⚡️ #yiisoftValidator #yiisoftForm
Переименовали методы в классе
•
Переименовали методы в классе
Result
из пакета Yii Validator, в итоге публичный интерфейс класса выглядит следующим образом:•
isValid(): bool
• isAttributeValid(string $attribute): bool
• getErrors(): Error[]
• getErrorMessages(): string[]
• getErrorMessagesIndexedByPath(string $separator = '.'): array<string, non-empty-list<string>>
• getErrorMessagesIndexedByAttribute(): array<string, non-empty-list<string>>
• getAttributeErrors(string $attribute): Error[]
• getAttributeErrorMessages(string $attribute): string[]
• getCommonErrorMessages(): string[]
Yii Form адаптировали к этим изменениям (PR).⚡️ #yiisoftValidator
В пакете Yii Validator добавили несколько новых методов в класс
•
•
В пакете Yii Validator добавили несколько новых методов в класс
Result
(PR).•
getErrorsIndexedByAttribute()
— возвращает список сообщений об ошибках, разбитых по атрибутам. Например:[
'name' => ['error1', 'error2'],
'age' => ['error'],
]
•
getCommonErrors()
— возвращает список сообщений об ошибках, не относящихся к атрибутам.⚡️ #yiisoftDocs
В разделе «Стиль кода» документации добавили соглашение об именовании коллекций: классы, интерфейсы, трейты и переменные, являющиеся коллекцией, должны оканчиваться на
В разделе «Стиль кода» документации добавили соглашение об именовании коллекций: классы, интерфейсы, трейты и переменные, являющиеся коллекцией, должны оканчиваться на
Collection
(PR).👍3