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

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

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

Поддержать разработчиков:
https://opencollective.com/yiisoft
Download Telegram
⚡️ #yiisoftDocs #yiisoftRequestModel

Актуализировано описание в части работы с роутингом в пакете Yii Request Model (PR) и документации (PR).
⚡️ #yiisoftRouter

Готовим Yii Router к релизу: подняли уровень psalm до 1 (PR) и удалили интерфейсы CurrentRouteInterface.php, GroupInterface, RouteInterface, RouteParametersInterface (PR).

Удалённые интерфейсы вводились для разделения контекстов использования (конфигурирование и получение данных), но практика показала, что это было неудачное решение (типизация по факту некорректная + интерфейсы вводят в заблуждение). Но, чтобы всё-таки повысить удобство публичного API, мы объединили методы, которые требуются только внутри пакета, и пометили их как @internal:

• в классе Route методы getDispatcherWithMiddlewares(), getName(), getMethods(), getPattern(), getHost(), isOverride(), getDefaults(), hasMiddlewares(), getDispatcherWithMiddlewares() объединены в один getData();

• в классе Group методы getCorsMiddleware(), hasCorsMiddleware(), getMiddlewareDefinitions(), getItems(), getPrefix(), getNamePrefix(), getHost() объединены в один getData();

• в классе CurrentRoute методы setRoute() и setArguments() объединены в один setRouteWithArguments();

• метод CurrentRoute::setUri() также помечен как @internal.

—————

⚡️ #yiisoftRouterFastroute #yiisoftRequestModel #yiisoftYiiDebugApi #yiisoftYiiDataview #yiisoftDocs #yiisoftDemo #yiisoftApp #yiisoftDemoApi

Соответствующие изменения были внесены в документацию (PR), приложения и пакеты:

- Yii Router FastRoute Adapter (PR),
- Yii Request Model (PR, PR),
- Yii Debug API (PR),
- Yii Data Widgets (PR),
- Шаблон веб-приложения (PR),
- Демо веб-приложения (PR),
- Демо API-приложения (PR).
⚡️ #yiisoftRequestModel

Несколько изменений в пакете Yii Request Model (PR):

- удалили интерфейс ValidatableModelInterface, использовав вместо него интерфейс Yiisoft\Validator\RulesProviderInterface;

- перенесли конфигурацию пакета из группы common в группу web.
👍2
⚡️ #yiisoftRequestModel #yiisoftDemoApi

В пакете Yii Request Model удалили конфигурацию фабрики мидлварей (PR). Подразумевается, что она должна конфигурироваться в приложении. В демо API-приложения, где используется Yii Request Model так и сделали (PR).
⚡️ #yiisoftRequestModel #yiisoftForm

К последним изменениям в Yii Validator адаптировали Yii Request Model (PR) и Yii Form (PR).
⚡️ #yiisoftRequestModel

В пакете Yii Request Model исправили ошибку, возникавшую при вызове метода RequestValidationException::getFirstErrors() (PR).
⚡️ #yiisoftValidator #yiisoftForm #yiisoftRequestModel #yiisoftDemo

Большое обновление Yii Validator (PR).

• Добавлена поддержка атрибутов PHP. Выглядит это приблизительно так:

final class Point
{
#[HasOne(Coordinates::class)]
private $coordinates;

#[Number(min: -10, max: 10)]
private int $x;

#[Number(min: -10, max: 10)]
private int $y;
}

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

• В связи с переходом на PHP 8.0 и возможностью использовать именованные аргументы создание правил через статическую фабрику ::rule() утратило смысл. Теперь правила создаются классическим способом через конструктор (new MyRule()).

• Правило Each теперь принимает в качестве правил iterable-значение вместо RuleSet.

• Правило MatchRegularExpression переименовано в Regex.

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

Необходимые изменения (в том числе поднята минимальная версия PHP до 8.0) внесены в пакеты и приложения, зависящие от валидатора:
- Yii Form (PR),
- Yii Request Model (PR),
- Демо веб-приложения (PR).
👍3🔥1
⚡️ #yiisoftAccess #yiisoftErrorHandler #yiisoftEventDispatcher #yiisoftFactory #yiisoftHttp #yiisoftI18n #yiisoftAliases #yiisoftJson #yiisoftProfiler #yiisoftInjector #yiisoftMailerSymfony #yiisoftMutex #yiisoftRateLimiter #yiisoftNetworkUtilities #yiisoftSession #yiisoftRouter #yiisoftStrings #yiisoftRouterFastroute #yiisoftRequestBodyParser #yiisoftTranslatorMessageGettext #yiisoftTranslatorExtractor #yiisoftTranslatorFormatterSimple #yiisoftTranslator #yiisoftTranslatorFormatterIntl #yiisoftTranslatorMessageDb #yiisoftUser #yiisoftVarDumper #yiisoftViewTwig #yiisoftYiiEvent #yiisoftTranslatorMessagePhp #yiisoftDataResponse #yiisoftCacheFile #yiisoftCookies #yiisoftCsrf #yiisoftAssets #yiisoftAuthJwt #yiisoftLog #yiisoftArrays #yiisoftYiiFilesystem #yiisoftYiiHttp #yiisoftYiiRunnerHttp #yiisoftLogTargetFile #yiisoftLogTargetEmail #yiisoftYiiRunnerRoadrunner #yiisoftSecurity #yiisoftYiiSwagger #yiisoftYiiSentry #yiisoftMutexFile #yiisoftMiddlewareDispatcher #yiisoftTestSupport #yiisoftYiiDebug #yiisoftYiiDebugViewer #yiisoftCacheApcu #yiisoftYiiDataview #yiisoftLogTargetSyslog #yiisoftAuth #yiisoftDefinitions #yiisoftRbacPhp #yiisoftDataDb #yiisoftData #yiisoftRequestModel #yiisoftDi #yiisoftConfig #yiisoftRbacRulesContainer

Продолжаем заменять рабочие процессы на переиспользуемые из Yii GitHub Actions:

- Yii Access (PR)
- Yii Error Handler (PR)
- Yii Event Dispatcher (PR)
- Yii Factory (PR)
- Yii HTTP (PR)
- Yii Internationalization Library (PR)
- Yii Aliases (PR)
- Yii JSON (PR)
- Yii Profiler (PR)
- Yii Injector (PR)
- Yii Mailer Symfony Mailer Extension (PR)
- Yii Mutex (PR)
- Yii Rate Limiter Middleware (PR)
- Yii Network Utilities (PR)
- Yii Session (PR)
- Yii Router (PR)
- Yii Strings (PR)
- Yii Router FastRoute Adapter (PR)
- Yii Request Body Parser (PR)
- Yii Translator gettext Message Storage (PR)
- Yii Message Extractor (PR)
- Yii Translator Simple Message Formatter (PR)
- Yii Message Translator (PR)
- Yii Translator intl Message Formatter (PR)
- Yii Translator DB Message Storage (PR)
- Yii User (PR)
- Yii VarDumper (PR)
- Yii View Twig Renderer (PR)
- Yii Event (PR)
- Yii Translator PHP Message Storage (PR)
- Yii Data Response (PR)
- Yii Cache File Handler (PR)
- Yii Cookies (PR)
- Yii CSRF Protection Library (PR)
- Yii Assets (PR)
- Yii Auth JWT (PR)
- Yii Logging Library (PR)
- Yii Arrays (PR)
- Yii Filesystem (PR)
- Yii HTTP Application (PR)
- Yii HTTP Runner (PR)
- Yii Logging File Target (PR)
- Yii Logging Email Target (PR)
- Yii RoadRunner Runner (PR)
- Yii Security (PR)
- Yii Swagger (PR)
- Yii Sentry (PR)
- Yii Mutex File Driver (PR)
- Yii Middleware Dispatcher (PR)
🤯6👍5
⚡️ #yiisoftMailer #yiisoftLogTargetSyslog #yiisoftHttp #yiisoftI18n #yiisoftLog #yiisoftLogTargetDb #yiisoftLogTargetEmail #yiisoftMailerSymfony #yiisoftMiddlewareDispatcher #yiisoftMutexPdoOracle #yiisoftMutexRedis #yiisoftRbac #yiisoftRbacDb #yiisoftRbacPhp #yiisoftRequestBodyParser #yiisoftRateLimiter #yiisoftProxy #yiisoftProfiler #yiisoftMutexPdoPgsql #yiisoftMutexPdoMysql #yiisoftMailerSwiftmailer #yiisoftHtml #yiisoftRequestModel #yiisoftRequirements #yiisoftRouter #yiisoftRouterFastroute #yiisoftSession #yiisoftStrings #yiisoftTestSupport #yiisoftTranslator #yiisoftTranslatorMessageDb #yiisoftUser #yiisoftView #yiisoftViewTwig #yiisoftWidget #yiisoftYiiConsole

Сделали изменения в стили кода. Методы, вызываемые «цепочкой», перенесли на новую строку:

- Yii Mailer Library (PR)
- Yii Logging Syslog Target (PR)
- Yii HTTP (PR)
- Yii Internationalization Library (PR)
- Yii Logging Library (PR)
- Yii Logging DB Target (PR)
- Yii Logging Email Target (PR)
- Yii Mailer Symfony Mailer Extension (PR)
- Yii Middleware Dispatcher (PR)
- Yii Mutex Oracle PDO Driver (PR)
- Yii Mutex Redis Driver (PR)
- Yii Role-Based Access Control (PR)
- Yii RBAC Database (PR)
- Yii RBAC PHP File Storage (PR)
- Yii Request Body Parser (PR)
- Yii Rate Limiter Middleware (PR)
- Yii Proxy (PR)
- Yii Profiler (PR)
- Yii Mutex PostgreSQL PDO Driver (PR)
- Yii Mutex MySQL PDO Driver (PR)
- Yii Mailer SwiftMailer Extension (PR)
- Yii HTML (PR)
- Yii Request Model (PR)
- Yii Requirements Checker (PR)
- Yii Router (PR)
- Yii Router FastRoute Adapter (PR)
- Yii Session (PR)
- Yii Strings (PR)
- Yii Test Support (PR)
- Yii Message Translator (PR)
- Yii Translator DB Message Storage (PR)
- Yii User (PR)
- Yii View (PR)
- Yii View Twig Renderer (PR)
- Yii Widget (PR)
- Yii Console (PR)
🔥4👍3
⚡️ #yiisoftValidator

Сделали важный рефакторинг в Yii Validator, разделив правила на собственно само правило и обработчик правила (PR).

Такой подход позволит автоматически разрешать зависимости обработчика правила (например, правило, которому для проверки требуется подключение к БД).

#yiisoftForm #yiisoftRequestModel #yiisoftYiiMiddleware #yiisoftYiiDebugApi #yiisoftDemoApi

Адаптировали к изменениям в валидаторе пакеты и приложения:

- Yii Form (PR)
- Yii Request Model (PR)
- Yii Middleware (PR)
- Yii Debug API (PR)
- Демо API-приложения (PR)
⚡️ #yiisoftRequestModel

В пакете Yii Request Model улучшили сообщение о некорректной конфигурации мидлвари в MiddlewareFactory (PR).
⚡️ #yiisoftRequestModel

В Yii Request Model добавили возможность в обработчике использовать атрибуты для получения данных из запроса (PR). Например:

final class SimpleController
{
public function action(
#[Route('id')] int $id,
#[Request('foo')] $attribute,
): ResponseInterface {
echo $id;
//...
}
}


Доступные атрибуты: Body, Query, Request, Route и UploadedFiles.
🔥72
⚡️ #yiisoftRequestModel

В Yii Request Model немного порефакторили существующие тесты и добавили новых (PR).
🔥2
⚡️ #yiisoftRequestModel

Yii Request Model адаптировали к последней версии yiisoft/middleware-dispatcher (PR).
⚡️ #yiisoftRequestModel

В Yii Request Model обновили версию dev-зависимости yiisoft/test-support до ^3.0 (PR).
⚡️ #yiisoftRequestModel

В readme пакета Yii Request Model добавили информацию о подключении мидлвари (PR).
⚡️ #yiisoftRequestModel

Несколько улучшений в Yii Request Model.

• Подняли минимальную требуемую версию yiisoft/translator до ^2.0 и адаптировали тесты к последним изменениям в валидаторе (PR).

• Добавили поддержку yiisoft/middleware-dispatcher версии ^4.0, а также в CI добавили проверку транзитивных зависимостей (PR).

• В CI добавили Rector, применили предлагаемые изменения (PR).

• Немного подчистили код и добавили секцию с требованиями в readme (PR).
🔥2
⚡️ #yiisoftYiiDataview #yiisoftYiiGii #yiisoftRequestModel

Добавили поддержку yiisoft/router версии ^2.0 в пакетах:
- Yii Data Widgets (PR),
- Gii (PR),
- Yii Request Model (PR).
👍2
⚡️ #yiisoftValidator #yiisoftDemo #yiisoftYiiMiddleware #yiisoftRequestModel #yiisoftForm #yiisoftYiiDebug #yiisoftYiiGii

Несколько обновлений в Yii Validator.

• Добавили возможность переводить названия атрибутов (PR).

• В правиле Required к сообщениям добавили параметр "attribute" (PR).

• Перенесли классы (PR):
RulesDumperYiisoft\Validator\Helper
RuleHandlerContainer
Yiisoft\Validator\RuleHandlerResolver
SimpleRuleHandlerContainer
Yiisoft\Validator\RuleHandlerResolver

К последним изменениям адаптировали:
- Демо приложений (PR),
- Yii Middleware (PR),
- Yii Request Model (PR),
- Yii Form (PR),
- Yii Debug (PR),
- Gii (PR).
👍5
#yiisoftRequestModel

Пакет Yii Request Model закрыт.

Предыстория

В пакетах Yii Request Model и Yii Form существовал функционал для создания и наполнения объектов. Каждый из пакетов делал это по своему.

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

Дополнительно в отдельном пакете Yii Validating Hydrator создан валидирующий гидратор. По факту это декоратор над обычным гидратором, который выполняет валидацию после создания и наполнения объекта.

И, наконец, написан пакет Yii Input HTTP, который предоставляет дополнения к Yii Hydrator и Yii Middleware Dispatcher:

• модель запроса;
• атрибуты для гидратора, позволяющие получать данные из объекта запроса (Query, Body, UploadedFiles и т. д.);
• возможность использовать атрибуты гидратора для наполнения параметров в экшенах.

Таким образом функционал пакета Yii Request Model распределился по новым пакетам. А также мы получили PHP-атрибуты (Query, Body, UploadedFiles и т. д.), которые могут быть использованы:

• в параметрах экшена;
• внутри любого объекта при наполнении гидратором, в том числе и в моделях запроса или формы.
🔥8🎉21🤔1😢1🍾1