🌿 #Полезное
На хабре опубликована статья Валерия Горбачева (один из ключевых разработчиков Yii DB) на основе одноимённого доклада на HighLoad++ 2022.
📗 Хождение по граблям PDO: что скрывают за собой современные PHP ORM
За приятной абстракцией скрывается множество нюансов и неочевидных штук. В деле абстрагирования БД всё крайне не просто.
На хабре опубликована статья Валерия Горбачева (один из ключевых разработчиков Yii DB) на основе одноимённого доклада на HighLoad++ 2022.
📗 Хождение по граблям PDO: что скрывают за собой современные PHP ORM
За приятной абстракцией скрывается множество нюансов и неочевидных штук. В деле абстрагирования БД всё крайне не просто.
🔥17❤2
#yiisoftYiiMiddleware #ПатчРелиз #Релиз
🎁 Yii Middleware 1.0.1
• Удалена зависимость
• Исправлены некорректные редиректы для GET-запросов в мидлвари
• Отключен поиск локали в куках, если не установлен параметр
🎁 Yii Middleware 1.0.1
• Удалена зависимость
yiisoft/network-utilities
.• Исправлены некорректные редиректы для GET-запросов в мидлвари
Locale
.• Отключен поиск локали в куках, если не установлен параметр
$cookieDuration
в мидлвари Locale
.🔥8❤2
#yiisoftI18n #МинорныйРелиз #Релиз
🎁 Yii Internationalization Library 1.2
• Добавлен провайдер локали
• Минимальная версия PHP поднята до
🎁 Yii Internationalization Library 1.2
• Добавлен провайдер локали
LocaleProvider
.• Минимальная версия PHP поднята до
^8.0
.👍6❤2
🛑 #yiisoftYiiGiiFrontend
Разработка Gii Frontend прекращена. Пакет отправлен в архив.
Фронт для Giiбудет реализован в Yii Development Panel.
Разработка Gii Frontend прекращена. Пакет отправлен в архив.
Фронт для Gii
👍6
#yiisoftLocaleMiddleware
✨ Yii Locale Middleware
Создан репозиторий под мидлварь
Планируется серьёзно переработать мидлварь и сделать её более настраиваемой и расширяемой. В связи с этим было принято решение выделить её в отдельный пакет.
Создан репозиторий под мидлварь
Locale
, которая переедет сюда из пакета Yii Middleware.Планируется серьёзно переработать мидлварь и сделать её более настраиваемой и расширяемой. В связи с этим было принято решение выделить её в отдельный пакет.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
#yiisoftI18n #ПатчРелиз #Релиз
🎁 Yii Internationalization Library 1.2.1
• Исправлена ошибка в
🎁 Yii Internationalization Library 1.2.1
• Исправлена ошибка в
LocaleProvider
: метод isDefaultLocale()
возвращал некорректное значение, если явно указать локаль, которая соответствует локали по умолчанию.👍3❤2
#yiisoftProxyMiddleware #FirstRelease #MajorRelease #Release
🎁 Proxy Middleware 1.0
Первая стабильная версия пакета Proxy Middleware. Пакет содержит middleware классы, связанные с прокси и реализующие PSR-15:
- TrustedHeaderProtocolResolver.
- TrustedHostsNetworkResolver.
Они были перенесены из пакета Yii Middleware и доработаны.
Вы можете использовать этот класс, если сервер находится за доверяемым балансировщиком нагрузки или прокси, которое постоянно устанавливает этот заголовок, игнорируя любые значения заголовков, переданных пользователем.
- IP.
- Протокол.
- Хост.
- Порт.
- Идентификатор IP - неизвестный или обфусцированный. Используется с RFC заголовком
Для forwarded заголовков можно использовать как одиночный заголовок
Типичная область применения - приложение за балансировщиком нагрузки.
Покрытие кода и MSI очень близко к 100%, статический анализ отвечает требованиям уровня 1 Psalm.
🎁 Proxy Middleware 1.0
Первая стабильная версия пакета Proxy Middleware. Пакет содержит middleware классы, связанные с прокси и реализующие PSR-15:
- TrustedHeaderProtocolResolver.
- TrustedHostsNetworkResolver.
Они были перенесены из пакета Yii Middleware и доработаны.
TrustedHeaderProtocolResolver
Устанавливает протокол в запросе сервера в соответствии со значением из специального доверяемого заголовка, такого, как например, X-Forwarded-Proto
.Вы можете использовать этот класс, если сервер находится за доверяемым балансировщиком нагрузки или прокси, которое постоянно устанавливает этот заголовок, игнорируя любые значения заголовков, переданных пользователем.
TrustedHostsNetworkResolver
Сканирует всю цепочку соединения и извлекает данные из forwarded заголовков с учётом доверяемых IP. В дополнении к этому, структура всех элементов проходит тщательную валидацию, потому что данным из заголовков нельзя доверять. Извлекаются следующие данные:- IP.
- Протокол.
- Хост.
- Порт.
- Идентификатор IP - неизвестный или обфусцированный. Используется с RFC заголовком
Forwarded
.Для forwarded заголовков можно использовать как одиночный заголовок
Forwarded
, стандартизированный в RFC 7239, так и группы заголовков, предоставляющих данные отдельно.Типичная область применения - приложение за балансировщиком нагрузки.
Покрытие кода и MSI очень близко к 100%, статический анализ отвечает требованиям уровня 1 Psalm.
GitHub
GitHub - yiisoft/proxy-middleware: Middleware to set request parameters based on headers provided by proxy
Middleware to set request parameters based on headers provided by proxy - yiisoft/proxy-middleware
👍8🔥5❤1
#yiisoftVarDumper #МинорныйРелиз #Релиз
🎁 Yii VarDumper 1.6
• В дампе анонимных функций удалены лишние пробелы.
• Реализован специализированный вывод дампа для объектов
🎁 Yii VarDumper 1.6
• В дампе анонимных функций удалены лишние пробелы.
• Реализован специализированный вывод дампа для объектов
DateTime
и DateTimeImmutable
. Теперь это выглядит так:new \DateTimeImmutable('2023-07-01T11:53:03.953+00:00', new \DateTimeZone('UTC'))
👍9❤2🔥1
#yiisoftAuthJwt #ПатчРелиз #Релиз
🎁 Yii Auth JWT 2.0.1
• Явно прописаны зависимости
🎁 Yii Auth JWT 2.0.1
• Явно прописаны зависимости
psr/http-message
, yiisoft/http
и web-token/jwt-core
.🔥5👍2
#yiisoftStrings #МинорныйРелиз #Релиз
🎁 Yii Strings 2.2
• Добавлен класс
Подробнее о концепции можно почитать в блоге Никиты Попова: Fast request routing using regular expressions.
• В
• В методе
-
• Минимальная версия PHP поднята до 8.0 и выполнен рефакторинг кода.
• Встроенные функции PHP теперь вызываются в корневом пространстве имён, что в некоторых случаях даёт выигрыш по производительности.
🎁 Yii Strings 2.2
• Добавлен класс
CombinedRegexp
, позволяющий оптимизировать сопоставление с несколькими регулярными выражениями. Также реализован класс MemoizedCombinedRegexp
, работающий аналогично, но дополнительно кэширующий результаты сопоставления.Подробнее о концепции можно почитать в блоге Никиты Попова: Fast request routing using regular expressions.
• В
StringHelper
добавлены методы trim()
, ltrim()
и rtrim()
, позволяющие удалить все пробельные символы Unicode в начале/конце строки.• В методе
Inflector::toSnakeCase()
добавлен булев параметр $strict
, меняющий поведение метода:-
true
(по умолчанию)createMyDTO
→ create_my_d_t_o
- false
createMyDTO
→ create_my_dto
В следующей мажорной версии пакета значение по умолчанию будет изменено на false
.• Минимальная версия PHP поднята до 8.0 и выполнен рефакторинг кода.
• Встроенные функции PHP теперь вызываются в корневом пространстве имён, что в некоторых случаях даёт выигрыш по производительности.
🔥10❤1👍1
#yiisoftMiddlewareDispatcher #МинорныйРелиз #Релиз
🎁 Yii Middleware Dispatcher 5.2.0
• Добавлена возможность использовать классы, реализующие PSR-интерфейс
• Добавлена возможность использовать классы с магическим методом
🎁 Yii Middleware Dispatcher 5.2.0
• Добавлена возможность использовать классы, реализующие PSR-интерфейс
RequestHandlerInterface
, в качестве мидлварей.• Добавлена возможность использовать классы с магическим методом
__invoke()
в качестве мидлварей.🔥3👍1
#yiisoftYiiMiddleware #ПатчРелиз #Релиз
🎁 Yii Middleware 1.0.2
• В мидлвари
• В мидлвари
• В мидлвари
🎁 Yii Middleware 1.0.2
• В мидлвари
CorsAllowAll
добавлен заголовок Access-Control-Expose-Headers: *
.• В мидлвари
Locale
проверка игнорирования запроса перенесена в начало.• В мидлвари
Locale
событие SetLocaleEvent
и изменение локали в генераторе URL теперь происходит до вызова последующих мидлварей.🔥2👏1
#yiisoftSockets
✨ Yii Sockets
Новый пакет для кода, который будет работать с различными типами сокетов (udp, tcp, …). Сейчас такой функционал частично реализован в Yii VarDumper и требуется в debug-пакетах.
Новый пакет для кода, который будет работать с различными типами сокетов (udp, tcp, …). Сейчас такой функционал частично реализован в Yii VarDumper и требуется в debug-пакетах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3❤🔥2
#yiisoftVarDumper #МинорныйРелиз #Релиз
🎁 Yii VarDumper 1.7
• Добавлены обработчики вывода дампа. Из коробки доступны:
-
-
-
• Добавлена функция
🎁 Yii VarDumper 1.7
• Добавлены обработчики вывода дампа. Из коробки доступны:
-
EchoHandler
— вывод с помощью echo
в стандартный поток вывода stdout
(используется по умолчанию);-
StreamHandler
— вывод с помощью json_encode
в сокеты;-
CompositeHandler
— выводы сразу в несколько обработчиков.• Добавлена функция
dump()
(алиас к существующей ранее функции d()
).🔥6
#yiisoftCacheFile #МинорныйРелиз #Релиз
🎁 Yii Cache File Handler 3.1
• В конструктор
• Метод
• Выполнен небольшой рефакторинг кода с использованием возможностей PHP 8.
🎁 Yii Cache File Handler 3.1
• В конструктор
FileCache
добавлен параметр $directoryMode
(по умолчанию, 0755
), позволяющий указать права на директорию с кэшем при её создании. • Метод
FileCache::withDirectoryMode()
помечен устаревшим.• Выполнен небольшой рефакторинг кода с использованием возможностей PHP 8.
🔥4👍1
❌ #yiisoftRequestModel
Пакет Yii Request Model закрыт.
Предыстория
В пакетах Yii Request Model и Yii Form существовал функционал для создания и наполнения объектов. Каждый из пакетов делал это по своему.
В связи с этим в рамках отдельного пакета был написан Yii Hydrator, который умеет создавать и наполнять объекты. Также гидратор поддерживает настраиваемое приведение типов, PHP-атрибуты и разрешение зависимостей.
Дополнительно в отдельном пакете Yii Validating Hydrator создан валидирующий гидратор. По факту это декоратор над обычным гидратором, который выполняет валидацию после создания и наполнения объекта.
И, наконец, написан пакет Yii Input HTTP, который предоставляет дополнения к Yii Hydrator и Yii Middleware Dispatcher:
• модель запроса;
• атрибуты для гидратора, позволяющие получать данные из объекта запроса (
• возможность использовать атрибуты гидратора для наполнения параметров в экшенах.
Таким образом функционал пакета Yii Request Model распределился по новым пакетам. А также мы получили PHP-атрибуты (
• в параметрах экшена;
• внутри любого объекта при наполнении гидратором, в том числе и в моделях запроса или формы.
Пакет 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🎉2❤1🤔1😢1🍾1
🍤 #Задачи
Потихоньку начали готовить шаблон API-приложения (yiisoft/app-api) к релизу. Конечно, предварительно нужно зарелизить ещё некоторые пакеты (отладка, гидратор и др.), но это не мешает вести работу и по шаблону.
Шаблон API-приложения, скорей всего, будет первым выпущенным шаблоном Yii3. Это будет ещё не большой релиз Yii3, но где-то рядом 😎
Есть несколько не сложных задач, с которыми вы при желании можете помочь.
⭐️ PHP Code Style Fixer в шаблоне API-приложения
yiisoft/app-api#184
Сейчас для автоматизации стиля кода используется StyleCI, но в шаблоне приложения хочется уйти от использования стороннего сервиса и заменить его на PHP CS Fixer. Нужно интегрировать фиксер в шаблон и добавить соответствующий GitHub экшн.
⭐️ Уровень Psalm в шаблоне API-приложения
yiisoft/app-api#182
Сейчас уровень 6й, нужно поднять до 1го, но это можно делать поэтапно и поднять до 5 или 4 — тоже будет полезно.
⭐️ Файл плана слияния конфигураций (Merge plan file)
yiisoft/config#121
В документации Yii Config нужно добавить несколько вещей. Первое, информацию о том, что файл плана слияния обновляется, в том числе, и при выполнении команды
Потихоньку начали готовить шаблон API-приложения (yiisoft/app-api) к релизу. Конечно, предварительно нужно зарелизить ещё некоторые пакеты (отладка, гидратор и др.), но это не мешает вести работу и по шаблону.
Шаблон API-приложения, скорей всего, будет первым выпущенным шаблоном Yii3. Это будет ещё не большой релиз Yii3, но где-то рядом 😎
Есть несколько не сложных задач, с которыми вы при желании можете помочь.
yiisoft/app-api#184
Сейчас для автоматизации стиля кода используется StyleCI, но в шаблоне приложения хочется уйти от использования стороннего сервиса и заменить его на PHP CS Fixer. Нужно интегрировать фиксер в шаблон и добавить соответствующий GitHub экшн.
yiisoft/app-api#182
Сейчас уровень 6й, нужно поднять до 1го, но это можно делать поэтапно и поднять до 5 или 4 — тоже будет полезно.
yiisoft/config#121
В документации Yii Config нужно добавить несколько вещей. Первое, информацию о том, что файл плана слияния обновляется, в том числе, и при выполнении команды
composer install
. Второе, предупреждение о том, что файл плана слияния должен быть добавлен в .gitignore
.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍2
#yiisoftRouterComposerAttributeCollector
✨ Yii Router Composer Attribute Collector
Сделали репозиторий под новый пакет, который реализует сборку роутов из классов, размеченных с помощью PHP-атрибутов. Сборка будет производится с помощью пакета olvlvl/composer-attribute-collector.
Сами атрибуты будут расположены в основном пакете Yii Router.
Собственно это всё уже почти реализовано в PR#196. Помимо атрибутов в роутере также будет добавлен интерфейс
Сделали репозиторий под новый пакет, который реализует сборку роутов из классов, размеченных с помощью PHP-атрибутов. Сборка будет производится с помощью пакета olvlvl/composer-attribute-collector.
Сами атрибуты будут расположены в основном пакете Yii Router.
Собственно это всё уже почти реализовано в PR#196. Помимо атрибутов в роутере также будет добавлен интерфейс
RoutesProviderInterface
, реализации которого будут возвращать маршруты для роутера.Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
#yiisoftStrings #МинорныйРелиз #Релиз
🎁 Yii Strings 2.3
• Добавлена поддержка Stringable-объектов в методе
🎁 Yii Strings 2.3
• Добавлена поддержка Stringable-объектов в методе
NumericHelper::normalize()
.👍7
#yiisoftAuth #МинорныйРелиз #Релиз
🎁 Yii Auth 3.1
• Добавлена мемоизация экземпляров
• Для свойства
• Исправлена ошибка с обработкой путей, содержащих не только ASCII-символы, в мидлвари
• Добавлен коллектор для
• Минимальная версия PHP повышена до 8.0 и выполнен соответствующий рефакторинг.
• Обновлена версия зависимости
• Явно прописана зависимость от
🎁 Yii Auth 3.1
• Добавлена мемоизация экземпляров
WildcardPattern
в мидлвари Authentication
.• Для свойства
$pattern
в методе HttpHeader::withPattern()
прописан атрибут Language
от JetBrains, что позволяет выводить значение этого свойства в PhpStorm c подсветкой синтаксиса и возможностью протестировать регулярное выражение.• Исправлена ошибка с обработкой путей, содержащих не только ASCII-символы, в мидлвари
Authentication
.• Добавлен коллектор для
yiisoft/yii-debug
.• Минимальная версия PHP повышена до 8.0 и выполнен соответствующий рефакторинг.
• Обновлена версия зависимости
yiisoft/http
.• Явно прописана зависимость от
psr/http-factory
.🤗4🔥3👏1
#yiisoftStrings #ПатчРелиз #Релиз
🎁 Yii Strings 2.3.1
• Добавлена мемоизация в
🎁 Yii Strings 2.3.1
• Добавлена мемоизация в
WildcardPatters
, что позволило в некоторых случаях повысить скорость обработки при повторных вызовах более чем в 2 раза.😎6🔥1👏1