Хроники 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
⚡️ #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).
⚡️ #yiisoftRouter

В пакете Yii Router сделали 100% покрытие тестами и исправили ошибку при формировании дерева роутов: в случаях, когда несколько групп имели один префикс, часть роутов не попадала в дерево (PR).
⚡️ #yiisoftRouter #yiisoftRouterFastroute

Продолжаем подготовку Yii Router и Yii Router FastRoute Adapter к релизу.

• Существенно дополнили документацию по роутеру (PR).

• Изменили поведение роута в случае, если ему передать диспетчер мидлварей уже с мидлварями: теперь они будут перезаписаны мидлварями роута (PR).

• Отключили добавление мидлварей из коллектора к статическим роутам и добавили поддержку variadic-аргументов для методов (PR, PR):
- Route::middleware(),
- Route::prependMiddleware(),
- Route::disableMiddleware(),
- Group::middleware(),
- Group::prependMiddleware(),
- Group::disableMiddleware(),
- RouteCollector::addRoute(),
- RouteCollector::addGroup(),
- RouteCollector::middleware(),
- RouteCollector::prependMiddleware().

• Добавили тестов, немного почистил и отрефакторили пакет Yii Router FastRoute Adapter (PR).
⚡️ #yiisoftRouter #yiisoftRouterFastroute #yiisoftDemo

Внесли изменения в Yii Router и Yii Router FastRoute Adapter.

• В роутере заменили зависимость MiddlewareDispatcher на MiddlewareFactoryInterface и EventDispatcherInterface (опционально); MiddlewareDispatcher теперь создаётся в конструкторе роутера (PR). Для повышения производительности в долгоживущих приложениях диспетчер с мидлварями в роуте подготавливается один раз и в дальнейшем переиспользуется.

• В FastRoute-адаптере подчистили readme и повысили уровень psalm до 2 (PR).

• Исправили генерацию URL в FastRoute-адаптере для адресов с локализацией, теперь при такой генерации не используются данные последнего активного роута (PR). Соответствующие изменения внесены в демо веб-приложения (PR).
⚡️ #yiisoftRouter #yiisoftRouterFastroute

Добавили приведение значений параметров по умолчанию к строке и улучшили psalm-аннотации в Yii Router (PR), а также добавили приведение значений параметров при генерации URL к строке и повысили уровень psalm до 1 в Yii Router FastRoute Adapter (PR).
#yiisoftRouter #yiisoftRouterFastroute #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Router 1.0.0
🎁
Yii Router FastRoute Adapter 1.0.0

Роутер (он же маршрутизатор) — одна из важнейших составляющих Yii3. Yii Router предоставляет PSR-7 совместимую маршрутизацию запросов и PSR-15 мидлварь, готовую для использования в приложении. Вместо реализации маршрутизации с нуля, пакет предоставляет интерфейс для конфигурации маршрутов и подразумевает использование совместно с пакетом-адаптером. В настоящее время доступен только Yii Router FastRoute Adapter.

Возможности роутера:

• Сопоставление URL-адресов и генерация URL-адресов с поддержкой HTTP-методов, хостов и значений по умолчанию.

• Хорошая поддержка в IDE для конфигурирования маршрутов.

• Группы маршрутов с неограниченной вложенностью.

• Поддержка PSR-15 мидлварей как для отдельных маршрутов, так и для групп.

• Готовая к использованию мидлварь Router для сопоставления маршрутов.

• Удобный сервис CurrentRoute, содержащий информацию о последнем подобранном маршруте.

• Поддержка CORS-мидлварей из коробки.

У пакетов, как и всегда, высокие технические показатели качества:
~100% уровень покрытия тестами,
~100% MSI,
~100% уровень покрытия типами.
Psalm уровень 1.

——————

⚡️ #yiisoftRouter #yiisoftRouterFastroute #yiisoftDemo

Перед релизом было внесено несколько изменений в Yii Router (PR):

• Из пакета удалили всё, что касается локалей. Сейчас в демо-приложении локализация в URL реализована с помощью мидлвари LocaleMiddleware, которая в дальнейшем, возможно, будет выделена в отдельный пакет или переедет в пакет Yii Middleware.

• В интерфейсе генератора URL UrlGeneratorInterface:
- добавили аргумент queryParameters, содержащий массив GET-параметров, в методах generate() и generateAbsolute();
- добавили метод generateFromCurrent() для генерации URL на основе текущего маршрута;
- добавили метод setDefaultArgument().

В соответствии с изменениями в роутере доработали Yii Router FastRoute Adapter (PR, PR) и демо веб-приложения (PR, PR, PR).
👍7🔥2
⚡️ #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
⚡️ #yiisoftHtml #yiisoftAuthJwt #yiisoftRouter #yiisoftLog

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

- Yii HTML (PR)
- Yii Auth JWT (PR)
- Yii Router (PR)
- Yii Logging Library (PR)
⚡️ #yiisoftRouter #yiisoftRouterFastroute

В роутере добавлена поддержка нескольких хостов:
- Yii Router (PR),
- Yii Router FastRoute Adapter (PR).

Пример:

Route::get('/')
->hosts(
'https://yiiframework.com/',
'https://yiiframework.ru/'
);
👍3
#yiisoftRouter #yiisoftRouterFastroute #МинорныйРелиз #Релиз

🎁 Yii Router 1.1.0

• Явно добавлена зависимость от psr/event-dispatcher, а зависимость psr/container перенесена в секцию "require-dev" (PR).

• Добавлена поддержка нескольких хостов в группах роутов (PR).

• Добавлена поддержка нескольких хостов в роутах.


🎁 Yii Router FastRoute Adapter 1.1.0

• Минимальная требуемая версия yiisoft/router повышена до ^1.1 (PR).

• Добавлена поддержка нескольких хостов в роутах.
⚡️ #yiisoftRouter #yiisoftRouterFastroute

Добавили рабочий процесс GitHub для проверки обратной совместимости в пакетах Yii Router (PR) и Yii Router FastRoute Adapter (PR).
#yiisoftRouter #МинорныйРелиз #Релиз

🎁 Yii Router 1.2.0

• Минимальная требуемая версия пакета yiisoft/middleware-dispatcher увеличена до ^3.0 (PR).
⚡️ #yiisoftRouter

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

• В CI добавили Rector, применили предлагаемые изменения и подняли минимальную требуемую версию PHP до ^8.0 (PR).

• В CI добавили проверку транзитивных зависимостей (PR).

• Добавили поддержку yiisoft/middleware-dispatcher версии ^4.0 (PR).
👍2
#yiisoftRouter #МажорныйРелиз #Релиз

Подняли показатель MSI до 100% (PR) и сделали мажорный релиз роутера.

🎁 Yii Router 2.0.0

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

• Объединённые типы параметров перенесены из аннотаций в сигнатуры методов (PR).

• В методе UrlGeneratorInterface::generateFromCurrent() добавлен параметр $queryParameters для переопределения GET-параметров в запросе (PR).

• Добавлена поддержка yiisoft/middleware-dispatcher версии ^4.0.
👍5🎉2
👍4
#yiisoftRouter #yiisoftRouterFastroute #МинорныйРелиз #Релиз

🎁 Yii Router 2.1

• Добавлена поддержка Yii Middleware Dispatcher 5.0.

🎁 Yii Router FastRoute Adapter 2.1

• Добавлена поддержка Yii Router 2.1.

😎 Релизы подготовил Рустам Мамадаминов (@rustamwin).
🔥3
#yiisoftRouter #yiisoftRouterFastroute #МажорныйРелиз #Релиз

🎁 Yii Router 3.0

• Конфигурация пакета адаптирована к соглашению Yii об именах групп конфигураций.

Релиз подготовил Сергей Предводителев.


🎁 Yii Router FastRoute Adapter 3.0

• Добавлена поддержка yiisoft/router версии ^3.0.

• Конфигурация пакета адаптирована к соглашению Yii об именах групп конфигураций.

Релиз подготовил Сергей Предводителев.
👍4🏆1
#yiisoftRouter #МинорныйРелиз #Релиз

🎁 Yii Router 3.1

• Добавлен атрибут RouteArgument для Yii Hydrator, который позволяет получить значение аргумента маршрута. Например:

#[RouteArgument('id')]
private string $id;


• Добавлена поддержка пакета psr/http-message версии ^2.0.
👍11🤔1👾1
#yiisoftRouter #МажорныйРелиз #Релиз

🎁 Yii Router 4.0

• Изменён контракт UrlGeneratorInterface: при генерации URL все неиспользованные аргументы должны быть добавлены как query-параметры, если явно не задан query-параметр с таким же именем.

• В методах generate(), generateAbsolute() и generateFromCurrent() интерфейса UrlGeneratorInterface добавлен параметр $hash.

• Удален метод RouteCollectorInterface::addGroup(), вместо него предполагается использование метода addRoute().

• Удалена зависимость классов Route, Group и MatchingResult от диспетчера мидлварей.

• Уточнён psalm-тип для аргументов в UrlGeneratorInterface.

• Добавлен сборщик данных для Yii Debug.

• Явно отмечены свойства классов только для чтения.

• Минимальная версия PHP повышена до 8.1.

• Ограничение версии PHP в composer.json изменено на ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0.

• Для опциональных nullable-параметров явно прописан тип с null для совместимости с PHP 8.4.
1👍3👾2