Новое в Symfony 5.4: Различные улучшения (часть 3)
- Новое в Symfony 5.4: Различные улучшения (часть 1)
- Новое в Symfony 5.4: Различные улучшения (часть 2)
- Новое в Symfony 5.4: Различные улучшения (часть 3)
Это последний пост из серии в которой мы рассказывали о новых возможностях Symfony 5.4 и Symfony 6. Мы надеемся, что вам понравилось и вы захотите обновить свои приложения Symfony до этих версий.
Более Длинные Интервалы RateLimiter
Компонент RateLimiter представляет реализацию Token Bucket для ограничения ввода и вывода вашего приложения. Обычно используется в таких функциях, как ограничение попыток входа (например, разрешает 5 неудачных попыток входа в систему каждый час) и ограничения API (например, до 1000 запросов в час).
Однако, некоторым приложениям требуются более длительные интервалы, что бы разрешить определённое количество событий в месяц или даже год. Вот почему в Symfony 5.4 мы добавили методы perMonth()
и perYear()
в компонент RateLimiter.
Простой Способ Создания Ошибок Ограничения
При использовании компонента Validator, если какая-то проверка не удалась вы получите список ошибок в виде класса ConstraintViolationList
. Вам нужно сделать то же самое при создании ошибки валидации самостоятельно. Это обременительно, если у вас всего одна ошибка:
$violations = new ConstraintViolationList();
$violations->add(new ConstraintViolation('A publish is already running.', '', [], null, '', null));
// например, когда используется ApiPlatform\Core\Bridge\Symfony\Validator\Exception\ValidationException
throw new ValidationException($violations);
В Symfony 5.4 мы добавили новый метод createSingleConstraint()
, чтобы упростить создание одиночных ошибок валидации:
$violations = ConstraintViolationList::createSingleConstraint('A publish is already running.');
throw new ValidationException($violations);
Блокировка Файлов при Добавлении Данных к Ним
Компонент Filesystem предоставляет независимые от операционной системы возможности, связанные с файловой системой. Одна из таких утилит - метод appendToFile()
, который добавляет контент в конец файла.
В Symfony 5.4 мы его улучшили с помощью третьего, необязательно логического аргумента. Если установлено значение true
, Symfony получит эксклюзивную блокировку файла пока идёт запись (аналогично флагу \LOCK_EX
в PHP).
$filesystem->appendToFile('logs.txt', 'Email sent to user@example.com');
// третий аргумент сообщает, следует ли блокировать файл при записи в него
$filesystem->appendToFile('logs.txt', 'Email sent to user@example.com', true);
PhpStan Экстрактор для PropertyInfo
Компонент PropertyInfo извлекает информацию о свойствах классов PHP используя метаданные популярных источников (Doctrine, PHP Reflection, PHPdoc, и т.д.) В Symfony 5.4 мы добавили поддержку извлечения информации на основе метаданных заданных для PHPStan, популярного инструмента для статического анализа PHP.
Это позволит вам извлекать информацию из таких метаданных:
class SomeClass
{
/** @var string|int */
public $property1;
/** @var (string|int)[] */
public $property2;
/** @var array<string|int> */
public $property3;
/** @var array<string|int, array<string>> */
public $property4;
/** @var (Dummy<array<mixed, string>, (int | (string<DefaultValue>)[])> | ParentDummy | null) */
public $property5;
}