⚡️ #yiisoftYiiSentry
Первый строчки кода в пакете Yii Sentry (PR): реализована мидлварь для перехвата исключений и добавлена конфигурация контейнера.
Первый строчки кода в пакете Yii Sentry (PR): реализована мидлварь для перехвата исключений и добавлена конфигурация контейнера.
⚡️ #yiisoftPackageTemplate
В пакете-шаблоне Yii Package Template подготовили конфигурации GitHub Actions для ежедневного запуска (PR).
Это позволит оперативно узнавать о том, что в пакете что-то сломалось из-за изменений в зависимостях.
В пакете-шаблоне Yii Package Template подготовили конфигурации GitHub Actions для ежедневного запуска (PR).
Это позволит оперативно узнавать о том, что в пакете что-то сломалось из-за изменений в зависимостях.
⚡️ #yiisoftProxy
В пакете Yii Proxy исправлена ошибка с некорректным проксированием исключений, что в некоторых случаях приводило к дублированию текста ошибки (PR).
Спасибо @mahmud128 за обнаруженную проблему.
В пакете Yii Proxy исправлена ошибка с некорректным проксированием исключений, что в некоторых случаях приводило к дублированию текста ошибки (PR).
Спасибо @mahmud128 за обнаруженную проблему.
⚡️ #yiisoftFactory
В пакете Yii Factory из конфигурации автодополнения для PhpStorm (файл
В пакете Yii Factory из конфигурации автодополнения для PhpStorm (файл
.phpstorm.meta.php
) удалены настройки для удалённого ранее метода Factory::get()
(PR).⚡️ #yiisoftPackageTemplate
В пакете-шаблоне Yii Package Template улучшен шаблон сообщения к пул-реквесту на GitHub (PR): закомментирована строка с инструкцией по заполнению поля «исправленные проблемы».
В пакете-шаблоне Yii Package Template улучшен шаблон сообщения к пул-реквесту на GitHub (PR): закомментирована строка с инструкцией по заполнению поля «исправленные проблемы».
⚡️ #yiisoftApp #yiisoftAppApi
В шаблонах приложений Yii Application Template (PR) и Yii API Template (PR) конфигурация PSR-17 (фабрики HTTP-объектов) перенесена из web-конфигурации в общую конфигурацию, так как эти фабрики могут потребовать везде, где используется HTTP-клиент, а он требуется не только в web-приложении, но, в некоторых случаях, и в консольных командах.
В шаблонах приложений Yii Application Template (PR) и Yii API Template (PR) конфигурация PSR-17 (фабрики HTTP-объектов) перенесена из web-конфигурации в общую конфигурацию, так как эти фабрики могут потребовать везде, где используется HTTP-клиент, а он требуется не только в web-приложении, но, в некоторых случаях, и в консольных командах.
⚡️ #yiisoftFactory
В Yii Factory добавлены дополнительные тесты (PR).
В процессе разработки фабрики и контейнера зависимостей большинство тестов были сделаны именно в контейнере. В рамках этого пул-реквеста добавили много аналогичных тестов для фабрики. Помимо увеличения покрытия кейсов использования тестами, это позволило выявить несколько проблем в фабрике (см. issues).
В Yii Factory добавлены дополнительные тесты (PR).
В процессе разработки фабрики и контейнера зависимостей большинство тестов были сделаны именно в контейнере. В рамках этого пул-реквеста добавили много аналогичных тестов для фабрики. Помимо увеличения покрытия кейсов использования тестами, это позволило выявить несколько проблем в фабрике (см. issues).
⚡️ #yiisoftFactory
В Yii Factory для метода
Например:
В Yii Factory для метода
Factory::create()
добавлены psalm-аннотации, позволяющие анализатору понять тип возвращаемого объекта, если в качестве конфигурации передано имя класса (PR).Например:
// return instance of class "Car"
$factory->create(Car::class);
// return mixed
$factory->create(['class' => Car::class]);
// return mixed
$factory->create('car');
⚡️ #yiisoftProxy
В пакете Yii Proxy откатили PR, который исправлял ошибку с некорректным проксированием исключений. Решение подразумевало клонирование объекта-исключения, но оказалось это вызывает ошибку. Будем думать как сделать по другому.
В пакете Yii Proxy откатили PR, который исправлял ошибку с некорректным проксированием исключений. Решение подразумевало клонирование объекта-исключения, но оказалось это вызывает ошибку. Будем думать как сделать по другому.
⚡️ #yiisoftView
В пакете Yii View в методах
При этом если значение "по-умолчанию" не передано, а запрашиваемый параметр не существует, то будет выброшено исключение
Примеры:
В пакете Yii View в методах
View::getCommonParameter()
и WebView::getCommonParameter()
добавлена поддержка второго параметра, задающего значение "по-умолчанию" (PR).При этом если значение "по-умолчанию" не передано, а запрашиваемый параметр не существует, то будет выброшено исключение
InvalidArgumentException
.Примеры:
$view->setCommonParameters([
'name' => 'Vasya',
]);
// return "Vasya"
$view->getCommonParameter('name');
// return "Vasya"
$view->getCommonParameter('name', 'Kolya');
// throw InvalidArgumentException
$view->getCommonParameter('age');
// return 42
$view->getCommonParameter('age', 42);
⚡️ #yiisoftFactory
В пакете Yii Factory несколько улучшений, связанных с дефинишенами (PR).
• В дефинишенах, заданных массивом, теперь можно не прописывать класс, если идентификатор дефинишена является именем класса (в DI-контейнере это так и работало, а вот в фабрике это не поддерживалось). Пример:
В пакете Yii Factory несколько улучшений, связанных с дефинишенами (PR).
• В дефинишенах, заданных массивом, теперь можно не прописывать класс, если идентификатор дефинишена является именем класса (в DI-контейнере это так и работало, а вот в фабрике это не поддерживалось). Пример:
ContactMailer::class => [• Исправлена ошибка: в случаях, когда в фабрику не передавался контейнер для разрешения зависимостей (то есть зависимости разрешает сама фабрика), для зависимостей не использовались дефинишены фабрики. Теперь используются.
// Ранее, если не указать класс, то фабрика кидала исключение
// 'class' => ContactMailer::class,
'__construct()' => [
'to' => '[email protected]',
],
],
⚡️ #yiisoftWidget
В пакете Yii Widget улучшен пример использования в виджете
В пакете Yii Widget улучшен пример использования в виджете
Breadcrumbs
+ сделаны небольшие изменения в psalm-аннотациях (PR).⚡️ #yiisoftView
В документации Yii View дополнен блок про использование методов
В документации Yii View дополнен блок про использование методов
hasCommonParameter()
и getCommonParameter()
+ сделаны небольшие изменения в psalm-аннотациях (PR).⚡️ #yiisoftDocs
Исправлены битые ссылки в документации в разделе "Running Applications" (PR).
Спасибо Andrew за пул-реквест 👍
Исправлены битые ссылки в документации в разделе "Running Applications" (PR).
Спасибо Andrew за пул-реквест 👍
⚡️ #yiisoftConfig
Подчистили служебные файлы в Yii Config (PR):
- улучшены конфигурации GitHub Workflow;
- улучшена конфигурация psalm;
- исключены все служебные файлы при создании архива репозитория;
- мелкие улучшения в других служебных файлах.
Подчистили служебные файлы в Yii Config (PR):
- улучшены конфигурации GitHub Workflow;
- улучшена конфигурация psalm;
- исключены все служебные файлы при создании архива репозитория;
- мелкие улучшения в других служебных файлах.
⚡️ #yiisoftMutex #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle
Полностью переосмыслен и переписан код пакета Yii Mutex (PR, PR, PR), обеспечивающий взаимное исключение исполнения критических участков кода в «состоянии гонки».
—————
Основные интерфейсы и классы
Пакет предоставляет интерфейсы и классы, которые уже используются в конкретных реализациях.
•
•
-
-
•
•
В общем случае есть два варианта использования:
Класс SimpleMutex
Предоставляет альтернативный вариант работы с мьютексами. Пример:
Класс Synchronizer
Позволяет запускать callback-функции в синхронизированном режиме (в один момент времени выполняется только один экземпляр callback-функции). Пример:
Соответствующие изменение внесены в мьютекс-драйверы:
- File Driver (PR),
- MySQL PDO Driver (PR),
- Postgres PDO Driver (PR),
- Oracle PDO Driver (PR).
Полностью переосмыслен и переписан код пакета Yii Mutex (PR, PR, PR), обеспечивающий взаимное исключение исполнения критических участков кода в «состоянии гонки».
—————
Основные интерфейсы и классы
Пакет предоставляет интерфейсы и классы, которые уже используются в конкретных реализациях.
•
MutexInterface
— интерфейс мьютекс-объекта с методами acquire()
(включает блокировку) и release()
(отключает блокировку).•
MutexFactoryInterface
— интерфейс фабрики, создающей экземпляр мьютекс-объекта с двумя методами: -
create()
— создание мьютекс-объекта;-
createAndAcquire()
— создание мьютекс-объекта и включение блокировки. При неудачном включении блокировки будет брошено исключение.•
MutexFactory
— абстрактный класс фабрики, реализующй интерфейс MutexFactoryInterface
, с уже реализованным методом createAndAcquire()
.•
RetryAcquireTrait
— трейт, позволяющий выполнить несколько попыток блокировки в течение заданного времени.В общем случае есть два варианта использования:
$mutexFactory = new MyMutexFactory();и
$mutex = $mutexFactory->create('critical_logic');
if (!$mutex->acquire(1000)) {
throw new \RuntimeException('Unable to acquire "critical_logic" mutex.');
}
// business logic execution
$mutex->release();
$mutexFactory = new MyMutexFactory();—————
// При неудачной блокировке будет
// брошено исключение
$mutex = $mutexFactory->createAndAcquire('critical_logic', 1000);
// business logic execution
$mutex->release();
Класс SimpleMutex
Предоставляет альтернативный вариант работы с мьютексами. Пример:
$mutex = new SimpleMutex(new MyMutexFactory());—————
if (!$mutex->acquire('critical_logic', 1000)) {
throw new \RuntimeException('Unable to acquire "critical_logic" mutex.');
}
// business logic execution
$mutex->release();
Класс Synchronizer
Позволяет запускать callback-функции в синхронизированном режиме (в один момент времени выполняется только один экземпляр callback-функции). Пример:
$synchronizer = new Synchronizer(new MyMutexFactory());—————
$newCount = $synchronizer->execute('critical_logic', function () {
return $counter->increase();
}, 10);
Соответствующие изменение внесены в мьютекс-драйверы:
- File Driver (PR),
- MySQL PDO Driver (PR),
- Postgres PDO Driver (PR),
- Oracle PDO Driver (PR).
⚡️ #yiisoftDocs
В документации исправлена ошибка в примере кода в разделе "Saying Hello" (PR).
Спасибо Igbanam Ogbuluijah за пул-реквест 👍
В документации исправлена ошибка в примере кода в разделе "Saying Hello" (PR).
Спасибо Igbanam Ogbuluijah за пул-реквест 👍
⚡️ #yiisoftFactory
В пакете Yii Factory исправлена ошибка в нормализаторе дефинишенов (PR).
В некоторых случаях нормализатор (класс
В пакете Yii Factory исправлена ошибка в нормализаторе дефинишенов (PR).
В некоторых случаях нормализатор (класс
Normalizer
) возвращал некорректный дефинишен с классом null
. Теперь в этих случаях бросается исключение InvalidConfigException
.