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

Обсуждение:
https://yangx.top/yii3ru

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

Поддержать разработчиков:
https://opencollective.com/yiisoft
加入频道
⚡️ #yiisoftRouter #yiisoftRouterFastroute #yiisoftYiiDebug #yiisoftApp #yiisoftDemo

В Yii Router методы для получения информации о текущем роуте вынесены из интерфейса UrlMatcherInterface в отдельный класс CurrentRoute (PR).

Текущие роут и URI можно получить из CurrentRoute, например:

use Psr\Http\Message\UriInterface;
use Yiisoft\Router\CurrentRoute;
use Yiisoft\Router\RouteParametersInterface;

final class MyClass {
private ?RouteParametersInterface $currentRoute;
private ?UriInterface $currentUri;

public function __construct(CurrentRoute $currentRoute) {
$this->currentRoute = $currentRoute->getRoute();
$this->currentUri = $currentRoute->getUri();
}
}

Соответствующие изменения внесены в пакеты:

- Yii Router FastRoute Adapter (PR).
- Yii Debug (PR),
- шаблон веб-приложения (PR),
- демо веб-приложения (PR).
🎁 #yiisoftMutex #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle #yiisoftMutexRedis #Релиз #ПервыйРелиз

Первый релиз Yii Mutex 1.0.0 (новость на yiiframework.com).

Этот пакет, используя механизм блокировки, обеспечивает взаимное исключение исполнения критических участков кода в «состоянии гонки». Доступны несколько вариантов использования.

1) Запуск callback-функции в синхронизированном режиме (в один момент времени выполняется только один экземпляр callback-функции) с помощью класса Synchronizer:

/** @var \Yiisoft\Mutex\Synchronizer $synchronizer */
$newCount = $synchronizer->execute('critical_logic', function () {
return $counter->increase();
}, 10);

2) Установка и снятие блокировки вручную с помощью класса SimpleMutex:

/** @var \Yiisoft\Mutex\SimpleMutex $simpleMutex */
if (!$simpleMutex->acquire('critical_logic', 1000)) {
throw new \RuntimeException('Unable to acquire "critical_logic" mutex.');
}
$newCount = $counter->increase();
$simpleMutex->release();

3) Ручное создание мьютекса и управление им:

/** @var \Yiisoft\Mutex\MutexFactoryInterface $mutexFactory */
$mutex = $mutexFactory->createAndAcquire('critical', 10);
$newCount = $counter->increase();
$mutex->release();

или вариант с полным контролем:

/** @var \Yiisoft\Mutex\MutexFactoryInterface $mutexFactory */
$mutex = $mutexFactory->create('critical');
if (!$mutex->acquire(10)) {
throw new \RuntimeException('Unable to acquire mutex "critical".');
}
$newCount = $counter->increase();
$mutex->release();

Вместе с основным пакетом зарелизены мьютекс-драйвера:

- File Driver 1.0.0
- MySQL PDO Driver 1.0.0
- Postgres PDO Driver 1.0.0
- Oracle PDO Driver 1.0.0
- Redis Driver 1.0.0
⚡️ #yiisoftDi

В пакете Yii Dependency Injection доработана логика работы метода Container::has() (PR).

В случае, когда для запрашиваемого класса не задан дефинишен, метод has() теперь не просто проверяет существование этого класса, но дополнительно проверяет все зависимости класса — есть ли у контейнера возможность создать запрашиваемый объект.
⚡️ #yiisoftDi

Исправлена ошибка в Yii Dependency Injection, возникающая в некоторых случаях при использовании контейнера в Swoole и приводящая к исключению CircularReferenceException (PR).

Спасибо @ChisWill за найденный баг 👍
⚡️ #yiisoftMutex

В пакете Yii Mutex исправлены описания опциональных зависимостей в composer.json (PR).
⚡️ #yiisoftRouter #yiisoftRouterFastroute

В Yii Router улучшена работа с хранением текущего роута (PR).

• Значения в CurrentRoute устанавливаются в самом роутере Yiisoft\Router\Middleware\Router, что позволило снять эту задачу с адаптеров. В адаптере Yii Router FastRoute Adapter был удалён соответствующий код (PR).

• При попытке повторной установки значений в CurrentRoute будет выброшено исключение RuntimeException.

• В конфигурации CurrentRoute добавлен сброс состояния.
⚡️ #yiisoftHtml

В виджетах CheckboxList и RadioList из пакета Yii HTML добавлена поддержка индивидуальных атрибутов для чекбоксов и радиокнопок соответственно (PR).

Добавлены методы:

- CheckboxList::individualInputAttributes(),
- CheckboxList::replaceIndividualInputAttributes(),
- RadioList::individualInputAttributes(),
- RadioList::replaceIndividualInputAttributes().
⚡️ #yiisoftDocs

Регламентировали порядок изменений в файле changelog в соответствии с их типом (см. соглашение о формате файлов changelog и upgrade):

New — новые фичи;
Chg — общие изменения;
Enh — улучшение существующих фич;
Bug — исправление ошибок.
#yiisoftMailerSymfony

Создан новый пакет Yii Mailer Symfony Extension. Это расширение к библиотеке Yii Mailer, позволяющее использовать Symfony Mailer для отправки писем.

В настоящий момент в Yii3 для отправки писем есть только Yii Mailer Swiftmailer Extension. В статье The end of Swiftmailer Fabien Potencier объявил о прекращении поддержки Swiftmailer в конце ноября 2021 года (Пётр Мязин перевёл эту статью: Swiftmailer умер, да здравствует Symfony Mailer!). Поэтому было принято решение создать расширение для отправки писем с помощью Symfony Mailer.
⚡️ #yiisoftUser

В пакете Yii User в конфигурации класса CurrentUser добавлен сброс состояния: сбрасывается текущая идентичность пользователя (PR).

Сброс состояния необходим для долгоживущих приложений, работающих в event-loop (RoadRunner, Swoole и др.).
⚡️ #yiisoftConfig

В пакете Yii Config объединение конфигурации рекурсивно выполняется только для тех конфигов, которые будут указаны в конструкторе \Yiisoft\Config\Config, все остальные конфигурации будут объединяться без рекурсии (PR).

Например:

$config = new \Yiisoft\Config\Config(
dirname(__DIR__),
'/config/packages',
'dev',
[
'params',
'events',
'events-web',
'events-console',
],
);

Рекурсивно будут объединены конфигурации params, events, events-web, events-console. Все остальные конфигурации (например, common, providers, bootstrap и т. д.) будут объединены не рекурсивно.

—————

#yiisoftApp #yiisoftAppApi #yiisoftDemo #yiisoftDemoApi

Все приложения адаптированы под это изменение:

- шаблон веб-приложения (PR),
- шаблон API-приложения (PR),
- демо веб-приложения (PR),
- демо API-приложения (PR).
🎁 #yiisoftHtml #Релиз #МажорныйРелиз

Мажорный релиз Yii HTML 2.0.0

• Добавлены классы для тегов Em, Strong, B и I.

• В классе тега Link добавлены методы as() и preload().

• В виджетах CheckboxList и RadioList добавлена поддержка индивидуальных атрибутов для чекбоксов и радиокнопок соответственно с помощью методов:

- CheckboxList::individualInputAttributes(),
- CheckboxList::replaceIndividualInputAttributes(),
- RadioList::individualInputAttributes(),
- RadioList::replaceIndividualInputAttributes().

• Для тегов разрешено передавать null в методы:

- Tag::class(),
- Tag::replaceClass(),
- BooleanInputTag::label(),
- BooleanInputTag::sideLabel().

Соответствующие атрибуты не будут сгенерированы.

• Добавлен класс NoEncode, в который можно обернуть содержимое, которое не должно быть экранировано в HTML-тегах.

• Пустые строковые значения атрибутов теперь не выводятся.

• В порядок вывода атрибутов в теге добавлен атрибут minlength.

—————

#yiisoftView #yiisoftYiiView #yiisoftViewTwig #yiisoftMailer #yiisoftMailerSwiftmailer #yiisoftLogTargetEmail

Адаптационные релизы к Yii HTML:

- Yii View 2.0.0
- Yii View Extension 2.0.0
- Yii View Twig Renderer 2.0.0
- Yii Mailer 2.0.0
- Yii Mailer Swiftmailer Extension 2.0.0
- Yii Logging Email Target 2.0.0

—————

#yiisoftApp #yiisoftDemo

В шаблоне веб-приложения и демо веб-приложения обновлены зависимости.
⚡️ #yiisoftDocs

В документации дополнены разделы по работе с event loop (PR):

- Using Yii with event loop,
- Using Yii with RoadRunner,
- Using Yii with Swoole.
⚡️ #yiisoftSession

В пакете Yii Session в конфигурации класса Session добавлен сброс состояния: выполняется закрытие сессии и сбрасывается её ID (PR).
⚡️ #yiisoftEventDispatcher #yiisoftInjector #yiisoftView #yiisoftStrings #yiisoftHtml

Строки в логах изменений расположены в порядке, описанном в соглашении о формате файлов changelog и upgrade (New, Chg, Enh, Bug):

- Yii Event Dispatcher (PR)
- Yii Injector (PR)
- Yii View (PR)
- Yii Strings (PR)
- Yii HTML (PR)
⚡️#yiisoftDemo

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

Спасибо Евгению Ткаченко за PR 👍
⚡️ #yiisoftStrings

В пакете Yii Strings исправлены ошибки psalm и улучшена конфигурация GitHub Workflow (PR):

- добавлен ежедневный запуск всех тестов;
- добавлен статический анализ в PHP 8.
⚡️ #yiisoftMailerSymfony

Реализовали Yii Mailer Symfony Extension, теперь в библиотеке Yii Mailer можно использовать Symfony Mailer для отправки писем (PR).
⚡️ #yiisoftInjector

В пакете Yii Injector исправлены ошибки psalm и улучшена конфигурация GitHub Workflow (PR):

- добавлен ежедневный запуск всех тестов;
- добавлен статический анализ в PHP 8.
⚡️ #yiisoftYiiDebug

Улучшена конфигурация пакета Yii Debug + финализирован класс Yiisoft\Yii\Debug\DebuggerIdGenerator (PR).
⚡️ #yiisoftYiiDevTool

В логе изменений сортировка строк, выполняемая в процессе работы команды release/make из Yii Development Tool, осуществляется в соответствии с соглашением о формате файлов changelog и upgrade (PR).