Новое в Symfony 6.3 — Улучшения DX (Часть 2)

Источник: «New in Symfony 6.3: DX Improvements (Part 2)»
Symfony 6.3 будет включать улучшения DX, такие, как обнаружение невидимых символов в VarDumper, улучшенный дамп YAML дат, параметры сборки сервис контейнера и потоковые JSON ответы.

Улучшения DX (опыт разработчика) — это небольшие изменения делающие повседневную работу разработчика проще и приятнее. Несколько дней назад мы опубликовали первые улучшения DX в SYmfony 6.3, и в этой статье показаны другие улучшения DX, добавленные в Symfony 6.3.

Отображение невидимых символов в содержимом дампа

Unicode определяет десятки различных невидимых символов, таких как пробелы. Эти символы проблемные, потому что могут привести к невозможности отладки проблем, где, например, две строки выглядят одинаково, но ваш код говорит, что они не совпадают.

В Symfony 6.3 мы улучшили компонент VarDumper, чтобы он всегда выделял невидимые символы в контенте. Например, если строка Lorem Ipsum содержит неразрывный пробел нулевой ширины (Unicode символ U+FEFF) после буквы o, вы увидите следующее: Lo\u{FEFF}rem Ipsum.

Разрешены миллисекунды и микросекунды в YAML датах

Компонент Yaml может отображать даты в миллисекундах/микросекундах, но эта информация теряется при повторном дампе дат. В Symfony 6.3 мы улучшили дампер Yaml, чтобы определять, есть ли в этих датах информация. Это новое поведения является автоматическим, поэтому вам не нужно добавлять какой-либо флаг конфигурации к вызову ->dump():

// ДО
date: 2023-01-08T16:18:25Z
# dumped as: 2023-01-08T16:18:25+00:00
date_with_milliseconds: 2023-01-08T16:18:25.213Z
# dumped as: 2023-01-08T16:18:25+00:00
date_with_microseconds: 2023-01-08T16:18:25.718800Z
# dumped as 2023-01-08T16:18:25+00:00

// После
date: 2023-01-08T16:18:25Z
# dumped as: 2023-01-08T16:18:25+00:00
date_with_milliseconds: 2023-01-08T16:18:25.213Z
# dumped as: 2023-01-08T16:18:25.213+00:00
date_with_microseconds: 2023-01-08T16:18:25.718800Z
# dumped as: 2023-01-08T16:18:25.718800+00:00

Параметры сборки в Сервис Контейнере

Компиляция Сервис Контейнера — одна из наиболее важных частей приложения Symfony. Она позволяет создавать и оптимизировать сервисы/параметры ваших приложений, и именно поэтому Symfony такой быстрый.

На этапе компиляции обычно создаются временные параметры в контейнере, которые впоследствии удаляются по завершении компиляции. Вот почему в Symfony 6.3 мы ввели параметры только для сборки. Добавьте к имени параметра точку (например, .name), и он будет автоматически удалён после завершения компиляции:

// нормальный параметр (вы можете удалить его вручную, если хотите)
$containerBuilder->setParameter('foo');

// этот не будет доступен в собранном контейнере (он удаляется после компиляции)
$containerBuilder->setParameter('.bar');

Потоковые JSON ответы

Когда вы передаёте много данных через JSON API, трудно поддерживать низкое потребление ресурсов, таких как память. В Symfony 6.3 мы представляем новый StreamedJsonResponse, который использует структуру и дженерики для создания эффективного ресурсосберегающего JSON ответа.

Представьте, что у вас есть такой генератор ответа:

public function loadArticles(): \Generator
{
// generate contents somehow...
yield ['title' => 'Article 1'];
yield ['title' => 'Article 2'];
yield ['title' => 'Article 3'];

// рекомендуется использовать flush() после определённого количества элементов
}

В Symfony 6.3 вы можете использовать следующее в своём контроллере для потоковой передачи этого JSON контента:

return new StreamedJsonResponse([
'_embedded' => [
'articles' => loadArticles(),
],
]);

Вот и всё. Symfony позаботиться о всей необходимой логики для эффективной потоковой передачи.

Дополнительные материалы

Предыдущая Статья

Настройка CSP в Laravel и Vite

Следующая Статья

Новое в Symfony 6.3 — Интеграция Notifier