Новое в Symfony 7.2: Различные улучшения (часть 2)

Источник: «New in Symfony 7.2: Misc. Improvements (Part 2)»
В Symfony 7.2 добавлена оценка надёжности паролей, упрощено тестирование RequestStack, конфигурация nullable boolean, улучшена анонимизация IP-адресов и обновлён Security Profiler.

Доступ к оценке надёжности пароля

Ограничение PasswordStrength проверяет, что заданный пароль достиг минимальной надёжности, заданной в ограничении. В Symfony 7.2 мы изменили видимость метода валидатора estimateStrength() с private на public.

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

Упрощённое модульное тестирование RequestStack

При использовании RequestStack в модульных тестах раньше требовался код, подобный этому, для настройки запросов:

$requestStack = new RequestStack();
$requestStack->push(Request::create('/'));
$someCustomClass = new MyCustomClass($requestStack);

В Symfony 7.2 мы упростили эту задачу, добавив конструктор RequestStack, принимающий массив запросов:

$someCustomClass = new MyCustomClass(new RequestStack([
Request::create('/'),
]));

Действие по умолчанию в санитайзере HTML

В Symfony 7.2 мы добавили новый метод defaultAction() в компоненте HtmlSanitizer. Этот метод устанавливает действие по умолчанию для элементов, которые явно не разрешены или заблокированы:

use Symfony\Component\HtmlSanitizer\HtmlSanitizer;
use Symfony\Component\HtmlSanitizer\HtmlSanitizerAction;

$config = (new HtmlSanitizerConfig())
->defaultAction(HtmlSanitizerAction::Block)
->allowElement('p');

$sanitizer = new HtmlSanitizer($config);

HtmlSanitizerAction — это PHP-перечисление с тремя вариантами: Drop (удаляет элемент и его дочерние элементы); Block (удаляет элемент, но сохраняет его дочерние элементы); Allow (сохраняет элемент).

Разрешение использования defaultNull() для BooleanNode

Текущий метод defaultNull() для BooleanNode, используемый при определении и обработке значений конфигурации, приводит null к значению true. В Symfony 7.2 мы обновили этот метод, чтобы можно было правильно определять nullable логические значения:

->booleanNode('enabled')->defaultNull()->end()

Улучшенная анонимизация IP-адресов

Класс IpUtils включает метод anonymize(), скрывающий часть IP-адреса для обеспечения конфиденциальности пользователя. В Symfony 7.2 мы добавили два новых аргумента к этому методу, чтобы можно было указать, сколько байт анонимизировать:

use Symfony\Component\HttpFoundation\IpUtils;

$ipv4 = '123.234.235.236';
// для адреса IPv4, можно скрыть от 0 до 4 байт
$anonymousIpv4 = IpUtils::anonymize($ipv4, v4Bytes: 3);
// $anonymousIpv4 = '123.0.0.0'

$ipv6 = '2a01:198:603:10:396e:4789:8e99:890f';
// для адреса IPv6, можно скрыть от 0 до 16 байт
$anonymousIpv6 = IpUtils::anonymize($ipv6, v6Bytes: 10);
// $anonymousIpv6 = '2a01:198:603::'

Строковый узел конфигурации

При определении дерева конфигурации можно использовать множество типов узлов для значений конфигурации (булевы, целые числа, плавающие, перечисления, массивы и т. д.). Однако вы не могли напрямую определять строковые значения; они указывались как scalar узлы.

В Symfony 7.2 мы добавили тип узла string и метод stringNode(), позволяющий явно задавать значения конфигурации в виде строк:

$rootNode
->children()
// ...
->stringNode('username')
->defaultValue('root')
->end()
->stringNode('password')
->defaultValue('root')
->end()
->end()
;

Улучшения в профайлере безопасности

В Symfony 7.2 панель безопасности Symfony Profiler получила несколько новых функций. Во-первых, была обновлена вкладка аутентификаторов. Ранее аутентификаторы, не поддерживающие запрос, не отображались:

Панель профайлера безопасности Symfony, в которой не отображается аутентификатор
Панель профайлера безопасности Symfony, в которой не отображается аутентификатор

Теперь, чтобы облегчить отладку, можно увидеть все аутентификаторы приложения. Если аутентификатор не поддерживает запрос, он будет помечен как "not supported":

Панель профайлера безопасности Symfony 7.2 с отображением всех аутентификаторов
Панель профайлера безопасности Symfony 7.2 с отображением всех аутентификаторов

При использовании stateful firewall вкладка "Token" для деаутентифицированных пользователей теперь включает ссылку на запрос, содержащий ранее аутентифицированного пользователя:

Панель профайлера безопасности Symfony 7.2 со ссылкой на предыдущего аутентифицированного пользователя
Панель профайлера безопасности Symfony 7.2 со ссылкой на предыдущего аутентифицированного пользователя

Вкладка "Authenticators" также была переработана для более наглядного отображения информации. Теперь она также показывает, является ли аутентификатор ленивым, и включает любое исключение, переданное в метод onAuthenticationFailure():

Панель профайлера безопасности Symfony 7.2 с дополнительной и переработанной информацией на вкладке authenticators
Панель профайлера безопасности Symfony 7.2 с дополнительной и переработанной информацией на вкладке authenticators

Это заключительная заметка в серии Новое в Symfony 7.2. Мы надеемся, что вам понравилось, и вы открыли для себя новые возможности Symfony 7.2. Ознакомьтесь с руководством по обновлению минорных версий Symfony, чтобы узнать, как перейти на 7.2 с других версий 7.x. Тем временем мы уже начали работу над Symfony 7.3, релиз которого состоится в конце мая 2025 года.

Комментарии


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

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

Новое в Symfony 7.2: Различные улучшения (часть 1)

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

Использовать двойные кавычки или нет