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

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

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

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

Сделали несколько улучшений в Yii View (PR):

• в интерфейсе ViewInterface и его реализациях View и WebView мутабельный метод setPlaceholderSalt() заменён на иммутабельный withPlaceholderSalt();

• доработали текучий интерфейс в ViewInterface, View и WebView: теперь все сеттеры (регистрация CSS/JS, удаление параметра, удаление блока и прочие) возвращают сам объект;

• в конфигурации пакета исправили функцию сброса состояния объектов: теперь после сброса в сервисы View и WebView добавляются параметры по-умолчанию.

И ещё одно важное изменение: теперь состояние сервисов View и WebView не клонируется при клонировании самих сервисов (в том числе когда используются методы with*()), то есть клонированный объект будет использовать те же данные, что и исходный. Это позволяет, например, получить WebView в контроллере из контейнера с помощью DI и изменить его контекст:

final class BlogController {
private WebView $view;
public function __construct (WebView $view) {
$this->view = $view->withContextPath(__DIR__.'/views');
}
}

... а затем зарегистрировать CSS в виджете:

final class LastPosts extends Widget 
{
private WebView $view;
public function __construct (WebView $view) {
$this->view = $view;
}
protected function run(): string
{
...
$this->view->registerCss('.lastPosts { background: #f1f1f1; }');
...
}
}

Для клонирования View или WebView вместе с состоянием можно использовать метод withClearedState(), который дополнительно очищает клонированное состояние объекта:

$view = $view->withClearedState();
⚡️ #yiisoftTranslatorExtractor

В пакете Yii Message Extractor добавлена поддержка нескольких источников для извлечения строк (PR). Чуть позже добавим документацию по этому функционалу.
#yiisoftYiiSwagger #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Swagger 1.0.0

Интеграция Swagger-PHP c Yii3, позволяющая генерировать интерактивную документацию OpenAPI на основании аннотаций, например:

/**
* @OA\Get(
* path="/api/endpoint",
* @OA\Response(response="200", description="Get default action")
* )
*/
public function process(
ServerRequestInterface $request,
RequestHandlerInterface $handler
): ResponseInterface
{
// ...
}
⚡️ #yiisoftTranslatorExtractor

Несколько улучшений в Yii Message Extractor (PR):

• добавили дружественные исключения;

• в экстракторе добавили проверку на наличие источников: теперь необходимо передать хотя бы один источник, в противном случае будет брошено исключение;

• немного доработали конфигурацию пакета;

• улучшили примеры в документации.
⚡️ #yiisoftRbac

В пакете Yii Role-Based Access Control Library добавили опцию, указывающую можно ли назначать разрешения напрямую пользователю (PR).

По-умолчанию эта опция отключена, то есть при назначении разрешения пользователю будет брошено исключение.
⚡️ #yiisoftAliases

В Yii Aliases добавили тестирование конфигурации пакета (PR).
#yiisoftConfig #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Config 1.0.0

Пакет обеспечивает сборку конфигурации для приложения из конфигураций, поставляемых вместе с зависимостями приложения, и конфигураций самого приложения.

При установке или изменении зависимостей приложения автоматически формируется план сборки конфигурации. Сама сборка происходит в процессе выполнения приложения, что значительно упрощает отладку и разработку.

Подробная информация об установке и использовании пакета представлена в readme.

У пакета, как обычно, высокие технические показатели качества:
- 100% покрытие тестами;
- 93,6% MSI;
- 99,1% уровень покрытия типами;
- Psalm уровень 1.

—————

Перед релизом было сделано несколько улучшений.

• Добавили опцию vendor-override-layer, позволяющая добавить слой конфигураций между приложением и вендором (PR).

• Улучшили описание в readme и конфигурации GitHub Actions, scrutinizer, psalm, StyleCI (PR).
⚡️ #yiisoftActiveRecord

Исправили проблему с многократным созданием подключения (ConnectionInterface) в Yii Active Record (PR).
⚡️ #yiisoftRouter

Доработали автоответ на OPTIONS-запросы в Yii Router (PR).

По-умолчанию роутер автоматически отправляет ответ на на OPTIONS-запрос на оснований заданных роутов:

HTTP/1.1 204 No Content
Allow: GET, HEAD

Если вам потребуются заголовки CORS, то вы можете использовать мидлварь, например tuupola/cors-middleware:

use Yiisoft\Router\Group;
use \Tuupola\Middleware\CorsMiddleware;

return [
Group::create('/api')
->withCors(CorsMiddleware::class)
->routes([
// ...
]
);
];
⚡️ #yiisoftYiiWidgets

В пакете Yii Widgets добавлен виджет Alert (PR).
⚡️ #yiisoftYiiDataview

В пакете Yii Data Widgets удалена неиспользуемая категория сообщений для перевода (PR).
⚡️ #yiisoftDb #yiisoftDbRedis

Несколько улучшений в Yii DB:

• построитель запросов и схема БД теперь зависят от ConnectionInterface вместо реализации Connection (PR), что позволяет использовать пакет с базами данных без драйверов PDO (например, ClickHouse);

• в ConnectionInterface добавлен метод quoteColumnName() (PR).

Эти изменения потребовали также внести несколько правок в Yii DB Redis Extension (PR).
⚡️ #yiisoftFiles

В пакете Yii Files добавили нормализацию разделителя пути в паттернах (PR).
#yiisoftFiles #ПатчРелиз #Релиз

🎁 Yii Files 1.0.1

• Добавлена нормализацию разделителя пути в паттернах.
#yiisoftDefinitions #ПатчРелиз #Релиз

🎁 Yii Definitions 1.0.1

• Добавлена поддержка объектов в значениях параметров по умолчанию (PR).

Возможность использовать объекты в качестве значений параметров по умолчанию появилась в PHP 8.1, например:

class Service
{
public function __construct(
private Logger $logger = new NullLogger(),
) {}
}


Теперь это поддерживается в пакете Yii Definitions, а следовательно и в фабрике Yii Factory и в DI-контейнере Yii Dependency Injection.
⚡️ #yiisoftDi

В пакете Yii Dependency Injection добавили тесты с разрешимой и неразрешимой опциональными зависимостями (PR).
⚡️ #yiisoftYiiCycle

Несколько улучшений в Yii Cycle ORM (PR):

- метод RepositoryContainer::get() в случае, если запрашиваемый репозиторий не найден, теперь бросает исключение Yiisoft\Di\NotFoundException вместо Yiisoft\Definitions\Exception\NotFoundException;

- сделали рефакторинг конфигурации пакета.
#yiisoftTranslatorExtractor #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Message Extractor 1.0.0

Инструмент командной строки, позволяющий автоматически извлекать идентификаторы строк для перевода из исходных PHP-файлов и помещать их в один из источников переводов (сейчас доступны PHP-файлы, БД и gettext-файлы).

Использование инструмента позволяет не отслеживать изменения в исходном коде: достаточно повторно запустить команду ./yii translator/extract для обновления источников.

—————

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

• папка vendor по умолчанию исключена из парсинга;

• добавлены опции except и only.
⚡️ #yiisoftUser #yiisoftDemo

В пакете Yii User сделали несколько улучшений.

• В мидлвари CookieLoginMiddleware опция addCookie переименована forceAddCookie, а также изменено поведение мидлвари, зависящее от этой опции (PR): теперь если опция включена, то куки будут добавляться всегда, а если отключена, то только в том случае, если метод IdentityInterface::shouldLoginByCookie() возвращает true.

• Добавили мидлварь LoginMiddleware, которая позволяет автоматически залогинить пользователя, если в запросе уже есть его идентичность IdentityInterface (PR). Как правило, аутентификацию пользователя и добавление его идентичности в запрос выполняет мидлварь \Yiisoft\Auth\Middleware\Authentication.

• Обновили dev-зависимости и добавили тесты конфигурации пакета (PR).

Соответствующие изменения внесены в демо веб-приложения (PR).
#yiisoftDi #ПатчРелиз #Релиз

🎁 Yii Dependency Injection 1.0.1

• Исправлена ошибка: определение сервиса в виде массива не использовалось в случае расширения сервиса в сервис-провайдере (PR).
⚡️ #yiisoftDemo

В демо веб-приложения для зависимости yiisoft/translator-extractor указана стабильная версия ^1.0 (PR).