Новое в Symfony 7.2: Week, WordCount и Yaml ограничения

Источник: «New in Symfony 7.2: Week, WordCount and Yaml Constraints»
В Symfony 7.2 появилось три новых ограничения: первое проверяет номера недель, второе проверяет количество слов, а третье проверяет синтаксис YAML.

Это первая статья из цикла рассказывающего о наиболее важных нововведениях в Symfony 7.2, релиз которой состоится в конце ноября 2024 года.

Ограничение Week

Это ограничение проверяет, что заданная строка (или объект, реализующий PHP интерфейс Stringable) представляет собой действительный номер недели в соответствии со стандартом ISO-8601 (например, 2025-W01). Этот же формат используется в HTML поле ввода недели:

// src/Entity/Rental.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Rental
{
#[Assert\Week]
protected string $bookingWeek;
}

Это ограничение включает опции max и min, позволяющие дополнительно ограничить количество недель, выбираемых пользователем:

// src/Entity/OnlineCourse.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class OnlineCourse
{
#[Assert\Week(min: '2022-W01', max: '2022-W20')]
protected string $startWeek;
}

Проверка того, является ли неделя валидной или нет, не так тривиальна, как кажется, потому что некоторые годы имеют 53 недели вместо обычных 52 недель. Благодаря этому новому ограничению можно забыть об этих деталях и позволить Symfony управлять логикой валидации.

Ограничение WordCount

Это ограничение проверяет, что строка (или объект, реализующий PHP-интерфейс Stringable) содержит количество слов, попадающее в заданный диапазон min-max:

// src/Entity/BlogPostDTO.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class BlogPostDTO
{
#[Assert\WordCount(min: 100, max: 200)]
protected string $content;
}

Подсчёт слов — сложная задача. Поэтому это ограничение опирается на класс IntlBreakIterator из PHP. Он также сильно зависит от языка содержимого, поэтому можно использовать опцию locale для определения локали содержимого (по умолчанию используется та же локаль, что и в текущем приложении).

Ограничение Yaml

Несмотря на свои причуды, YAML остаётся чрезвычайно популярным языком конфигурирования. Поэтому мы добавили ограничение, которое проверяет, содержит ли заданная строка (или объект Stringable) валидный синтаксис YAML:

// src/Entity/Report.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Report
{
#[Assert\Yaml(message: "Your configuration doesn't have valid YAML syntax.")]
private string $customConfiguration;
}

Также можно использовать любой из флагов конфигурации, определённых в Symfony компоненте Yaml:

#[Assert\Yaml(
message: "Your configuration doesn't have valid YAML syntax.",
flags: Yaml::PARSE_CONSTANT | Yaml::PARSE_CUSTOM_TAGS | Yaml::PARSE_DATETIME,
)
]

private string $customConfiguration;

Комментарии


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

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

Релиз Symfony 7.2

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

Что такое Docker и как он устроен