Новое в Symfony 6.3 — Улучшения DX (Часть 2)
Улучшения 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 позаботиться о всей необходимой логики для эффективной потоковой передачи.