⚡️ #yiisoftUser
В пакете Yii User в конфигурации класса
Сброс состояния необходим для долгоживущих приложений, работающих в event-loop (RoadRunner, Swoole и др.).
В пакете Yii User в конфигурации класса
CurrentUser
добавлен сброс состояния: сбрасывается текущая идентичность пользователя (PR).Сброс состояния необходим для долгоживущих приложений, работающих в event-loop (RoadRunner, Swoole и др.).
⚡️ Практически во всех пакетах добавлен ежедневный запуск тестов через GitHub Workflow.
#yiisoftCacheWincache #yiisoftView #yiisoftDi #yiisoftStrings #yiisoftRbacPhp #yiisoftYiiConsole #yiisoftCache #yiisoftDb #yiisoftRbac #yiisoftYiiAuthClient #yiisoftYiiGii #yiisoftViewTwig #yiisoftYiiWeb #yiisoftDbMssql #yiisoftDbOracle #yiisoftLog #yiisoftYiiDebug #yiisoftDbSqlite #yiisoftDbPgsql #yiisoftDbMysql #yiisoftEventDispatcher #yiisoftI18n #yiisoftYiiEvent #yiisoftYiiDbMigration #yiisoftValidator #yiisoftUser #yiisoftTranslatorMessageGettext #yiisoftSecurity #yiisoftMiddlewareDispatcher #yiisoftMutex #yiisoftNetworkUtilities #yiisoftProfiler #yiisoftProxy #yiisoftRequestBodyParser #yiisoftRouterFastroute #yiisoftInjector #yiisoftCacheApcu #yiisoftAuthJwt #yiisoftAuth #yiisoftAssets #yiisoftArrays #yiisoftAliases #yiisoftDemoApi #yiisoftDemo #yiisoftDataResponse #yiisoftData #yiisoftCsrf #yiisoftCookies #yiisoftConfig #yiisoftCacheMemcached #yiisoftCacheFile #yiisoftHttp #yiisoftHtml #yiisoftFiles #yiisoftFactory #yiisoftErrorHandler #yiisoftLogTargetDb #yiisoftLogTargetEmail #yiisoftLogTargetFile #yiisoftRequestModel #yiisoftRbacSpiralDb #yiisoftRateLimiter #yiisoftPackageTemplate #yiisoftMutexRedis #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftTranslatorFormatterSimple #yiisoftTranslatorFormatterIntl #yiisoftTranslatorExtractor #yiisoftTranslator #yiisoftTestSupport #yiisoftSession #yiisoftRouter #yiisoftRequirements #yiisoftTranslatorMessageDb #yiisoftTranslatorMessagePhp #yiisoftVarDumper #yiisoftWidget #yiisoftYiiBootstrap5 #yiisoftYiiBulma #yiisoftYiiCycle #yiisoftYiiDataview #yiisoftYiiDebugApi #yiisoftYiiDebugViewer #yiisoftMailerSwiftmailer #yiisoftMailer #yiisoftLogTargetSyslog #yiisoftJson #yiisoftForm #yiisoftYiiWidgets #yiisoftYiiView #yiisoftYiiSwagger #yiisoftYiiSentry
#yiisoftCacheWincache #yiisoftView #yiisoftDi #yiisoftStrings #yiisoftRbacPhp #yiisoftYiiConsole #yiisoftCache #yiisoftDb #yiisoftRbac #yiisoftYiiAuthClient #yiisoftYiiGii #yiisoftViewTwig #yiisoftYiiWeb #yiisoftDbMssql #yiisoftDbOracle #yiisoftLog #yiisoftYiiDebug #yiisoftDbSqlite #yiisoftDbPgsql #yiisoftDbMysql #yiisoftEventDispatcher #yiisoftI18n #yiisoftYiiEvent #yiisoftYiiDbMigration #yiisoftValidator #yiisoftUser #yiisoftTranslatorMessageGettext #yiisoftSecurity #yiisoftMiddlewareDispatcher #yiisoftMutex #yiisoftNetworkUtilities #yiisoftProfiler #yiisoftProxy #yiisoftRequestBodyParser #yiisoftRouterFastroute #yiisoftInjector #yiisoftCacheApcu #yiisoftAuthJwt #yiisoftAuth #yiisoftAssets #yiisoftArrays #yiisoftAliases #yiisoftDemoApi #yiisoftDemo #yiisoftDataResponse #yiisoftData #yiisoftCsrf #yiisoftCookies #yiisoftConfig #yiisoftCacheMemcached #yiisoftCacheFile #yiisoftHttp #yiisoftHtml #yiisoftFiles #yiisoftFactory #yiisoftErrorHandler #yiisoftLogTargetDb #yiisoftLogTargetEmail #yiisoftLogTargetFile #yiisoftRequestModel #yiisoftRbacSpiralDb #yiisoftRateLimiter #yiisoftPackageTemplate #yiisoftMutexRedis #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftTranslatorFormatterSimple #yiisoftTranslatorFormatterIntl #yiisoftTranslatorExtractor #yiisoftTranslator #yiisoftTestSupport #yiisoftSession #yiisoftRouter #yiisoftRequirements #yiisoftTranslatorMessageDb #yiisoftTranslatorMessagePhp #yiisoftVarDumper #yiisoftWidget #yiisoftYiiBootstrap5 #yiisoftYiiBulma #yiisoftYiiCycle #yiisoftYiiDataview #yiisoftYiiDebugApi #yiisoftYiiDebugViewer #yiisoftMailerSwiftmailer #yiisoftMailer #yiisoftLogTargetSyslog #yiisoftJson #yiisoftForm #yiisoftYiiWidgets #yiisoftYiiView #yiisoftYiiSwagger #yiisoftYiiSentry
⚡️ #yiisoftUser
Исправлена ошибка в Yii User: попытка аутентификации в
Исправлена ошибка в Yii User: попытка аутентификации в
CookieLoginMiddleware
теперь происходит не каждый запрос, а только в случае, когда пользователь не аутентифицирован (PR).⚡️ #yiisoftUser
Навели красоту в пакете Yii User: добавили/улучшили doc-блоки, причесали все служебные файлы, немного отрефакторили тесты (PR).
Навели красоту в пакете Yii User: добавили/улучшили doc-блоки, причесали все служебные файлы, немного отрефакторили тесты (PR).
⚡️ #yiisoftUser
В пакете Yii User доработали функционал гостевой идентичности (PR, PR):
- добавили интерфейс гостевой идентичности
- добавили интерфейс фабрики гостевой идентичности
Теперь можно в приложении сделать свою реализацию новых интерфейсов и, например, использовать несколько классов гостевой идентичности или добавить к ним идентификаторы.
В пакете Yii User доработали функционал гостевой идентичности (PR, PR):
- добавили интерфейс гостевой идентичности
GuestIdentityInterface
, который реализуется финальным классом GuestIdentity
;- добавили интерфейс фабрики гостевой идентичности
GuestIdentityFactoryInterface
и его реализацию GuestIdentityFactory
.Теперь можно в приложении сделать свою реализацию новых интерфейсов и, например, использовать несколько классов гостевой идентичности или добавить к ним идентификаторы.
⚡️ #yiisoftUser
Изменили интерфейс
- удалили метод
- добавили метод
Изменили интерфейс
CookieLoginIdentityInterface
в Yii User (PR):- удалили метод
getCookieLoginDuration()
;- добавили метод
shouldLoginByCookie()
, возвращающий булево значение, которое определяет нужно ли добавлять куки для данного пользователя.⚡️ #yiisoftUser
В пакете Yii User в куку для аутентификации добавили информацию о сроке действия токена и установили срок жизни куки равным сроку действия токена (PR).
Так как куку можно легко поправить в браузере, то в приложении нужно использовать один из двух вариантов:
1) кодировать куку (например, как это сделано в демо веб-приложения: мидлварь + её конфигурация);
2) дополнительно сохранять срок действия токена аутентификации на сервере и использовать его для проверки.
В пакете Yii User в куку для аутентификации добавили информацию о сроке действия токена и установили срок жизни куки равным сроку действия токена (PR).
Так как куку можно легко поправить в браузере, то в приложении нужно использовать один из двух вариантов:
1) кодировать куку (например, как это сделано в демо веб-приложения: мидлварь + её конфигурация);
2) дополнительно сохранять срок действия токена аутентификации на сервере и использовать его для проверки.
⚡️ #yiisoftUser
В пакете Yii User в классе
Этот метод можно использовать в долгоживущих приложений, работающих в event-loop (RoadRunner, Swoole и др.).
В пакете Yii User в классе
CurrentUser
добавили метод clear()
, который сбрасывает состояние объекта (PR).Этот метод можно использовать в долгоживущих приложений, работающих в event-loop (RoadRunner, Swoole и др.).
⚡️ #yiisoftUser #yiisoftDemo
В пакете Yii User для класса текущего пользователя
В демо веб-приложения добавили конфигурацию
В пакете Yii User для класса текущего пользователя
CurrentUser
сессия теперь передаётся не через конструктор, а через новый метод withSession()
+ сделаны иммутабельными и переименованы существующие методы (PR):setAccessChecker()
→ withAccessChecker()
,setAuthTimeout()
→ withAuthTimeout()
,setAbsoluteAuthTimeout()
→ withAbsoluteAuthTimeout()
.В демо веб-приложения добавили конфигурацию
CurrentUser
с использованием новых методов (PR).⚡️ #yiisoftUser #yiisoftDemo
В пакете Yii User сделали несколько улучшений.
• В мидлвари
• Добавили мидлварь
• Обновили dev-зависимости и добавили тесты конфигурации пакета (PR).
Соответствующие изменения внесены в демо веб-приложения (PR).
В пакете Yii User сделали несколько улучшений.
• В мидлвари
CookieLoginMiddleware
опция addCookie
переименована forceAddCookie
, а также изменено поведение мидлвари, зависящее от этой опции (PR): теперь если опция включена, то куки будут добавляться всегда, а если отключена, то только в том случае, если метод IdentityInterface::shouldLoginByCookie()
возвращает true
.• Добавили мидлварь
LoginMiddleware
, которая позволяет автоматически залогинить пользователя, если в запросе уже есть его идентичность IdentityInterface
(PR). Как правило, аутентификацию пользователя и добавление его идентичности в запрос выполняет мидлварь \Yiisoft\Auth\Middleware\Authentication
.• Обновили dev-зависимости и добавили тесты конфигурации пакета (PR).
Соответствующие изменения внесены в демо веб-приложения (PR).
#yiisoftUser #ПервыйРелиз #МажорныйРелиз #Релиз
🎁 Yii User 1.0.0
Пакет реализует функционал для управления идентичностью пользователя и проверки доступа:
• Вход и выход из системы.
• Получение текущей аутентифицированной идентичности.
• Изменение текущей идентичности.
• Проверка доступа для текущего пользователя.
• Автоматический вход в систему на основе идентификатора из атрибута запроса.
• Автоматический вход в систему (функция "запомнить меня") на базе cookie.
У пакета, как обычно, высокие технические показатели качества:
- 100% покрытие тестами;
- 100% MSI;
- 98,9% уровень покрытия типами;
- Psalm уровень 1.
—————
Перед релизом дополнили документацию (PR) и удалили из интерфейса
⚡️ #yiisoftDemo
В соответствии с этими изменениями доработали функцию "запомнить меня" в демо веб-приложения (PR).
🎁 Yii User 1.0.0
Пакет реализует функционал для управления идентичностью пользователя и проверки доступа:
• Вход и выход из системы.
• Получение текущей аутентифицированной идентичности.
• Изменение текущей идентичности.
• Проверка доступа для текущего пользователя.
• Автоматический вход в систему на основе идентификатора из атрибута запроса.
• Автоматический вход в систему (функция "запомнить меня") на базе cookie.
У пакета, как обычно, высокие технические показатели качества:
- 100% покрытие тестами;
- 100% MSI;
- 98,9% уровень покрытия типами;
- Psalm уровень 1.
—————
Перед релизом дополнили документацию (PR) и удалили из интерфейса
CookieLoginIdentityInterface
метод shouldLoginByCookie()
(PR). ⚡️ #yiisoftDemo
В соответствии с этими изменениями доработали функцию "запомнить меня" в демо веб-приложения (PR).
⚡️ #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)
Продолжаем заменять рабочие процессы на переиспользуемые из 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)
Сделали изменения в стили кода. Методы, вызываемые «цепочкой», перенесли на новую строку:
- 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
#yiisoftUser #ПатчРелиз #Релиз
🎁 Yii User 1.0.1
• Добавлена поддержка
🎁 Yii User 1.0.1
• Добавлена поддержка
psr/log
версий ^2.0
и ^3.0
(PR).👍4
#yiisoftUser #МажорныйРелиз #Релиз
🎁 Yii User 2.0
• Добавлена поддержка
• Конфигурация пакета адаптирована к соглашению Yii об именах групп конфигураций.
😎 Релиз подготовил Сергей Предводителев.
🎁 Yii User 2.0
• Добавлена поддержка
yiisoft/session
версии ^2.0
.• Конфигурация пакета адаптирована к соглашению Yii об именах групп конфигураций.
😎 Релиз подготовил Сергей Предводителев.
👍5
#yiisoftUser #МинорныйРелиз #Релиз
🎁 Yii User 2.1
• В методе
• Добавлена возможность устанавливать куку для автологина только на время сессии.
• Улучшены сообщения, отправляемые в лог.
• Минимальная версия PHP поднята до
• Требуемая версия зависимости
🎁 Yii User 2.1
• В методе
CookieLogin::addCookie()
добавлен опциональный параметр $duration
, позволяющий указать срок жизни устанавливаемой куки для автологина.• Добавлена возможность устанавливать куку для автологина только на время сессии.
• Улучшены сообщения, отправляемые в лог.
• Минимальная версия PHP поднята до
8.0
и выполнен соответствующий рефакторинг.• Требуемая версия зависимости
yiisoft/access
изменена на ^2.0
.👍9😢1👾1
#yiisoftUser #МинорныйРелиз #Релиз
🎁 Yii User 2.2
• Добавлена возможность в методе
• В мидлваре
• Минимальная версия PHP поднята до 8.1.
• Добавлена поддержка пакета
🎁 Yii User 2.2
• Добавлена возможность в методе
CurrentUser::can()
в качестве имени разрешения использовать строковые перечисления.• В мидлваре
LoginMiddleware
уровень лога изменён с warning
на debug
.• Минимальная версия PHP поднята до 8.1.
• Добавлена поддержка пакета
psr/http-message
версии ^2.0
.👍9👾3
#yiisoftUser #МинорныйРелиз #Релиз
🎁 Yii User 2.3
• Добавлен метод аутентификации
• Создана копия класса
• Доработано отладочное сообщение "Unable to authenticate user…" в
• Ограничение версии PHP в
• Для опциональных nullable-параметров явно прописан тип с
🎁 Yii User 2.3
• Добавлен метод аутентификации
ApiAuth
.• Создана копия класса
UserAuth
с именем WebAuth
, сам UserAuth
помечен как устаревший.• Доработано отладочное сообщение "Unable to authenticate user…" в
LogginMiddleware
.• Ограничение версии PHP в
composer.json
изменено на ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0
.• Для опциональных nullable-параметров явно прописан тип с
null
для совместимости с PHP 8.4.🔥8👾3
👍4👾1