Правило Issn
Правило Issn относится к группе ограничений
валидации Symfony и проверяет, что значение поля
представляет собой корректный ISSN. ISSN - это
международный стандартный номер сериального издания,
который состоит из восьми цифр, разделённых дефисом
на две группы по четыре цифры. Последняя цифра может
быть цифрой от 0 до 9 или символом 'X'. Правило
подходит для проверки полей формы, содержащих номера
журналов, газет и других периодических изданий.
Синтаксис
#[Issn]
Также правило можно использовать без атрибута, через
класс Issn в опциях формы:
use Symfony\Component\Validator\Constraints\Issn;
$constraint = new Issn();
Пример
Давайте создадим форму с полем issn и повесим
на него правило Issn:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\Issn;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('issn', TextType::class, [
'constraints' => [
new Issn(),
],
]);
}
}
?>
Теперь создадим контроллер, который принимает форму и проверяет её валидность:
<?php
namespace App\Controller;
use App\Form\ArticleType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(Request $request): Response
{
$form = $this->createForm(ArticleType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
return new Response('form is valid');
}
return new Response('form is invalid');
}
}
?>
Если отправить корректный ISSN '0378-5955',
то форма будет признана валидной:
"form is valid"
Пример
Давайте отправим некорректный ISSN '1234-5678'
и посмотрим на результат:
"form is invalid"
Чтобы получить текст ошибки, можно вывести его в Twig
через переменную form:
{{ form_errors(form.issn) }}
Результат выполнения кода для некорректного значения:
"This value is not a valid ISSN."
Пример
Давайте используем правило Issn напрямую,
без формы, через сервис валидатора:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Validator\Constraints\Issn;
use Symfony\Component\Validator\Validation;
class ArticleController extends AbstractController
{
public function index(): Response
{
$validator = Validation::createValidator();
$res = $validator->validate('0378-5955', [
new Issn(),
]);
if (count($res) === 0) {
return new Response('issn is valid');
}
return new Response('issn is invalid');
}
}
?>
Результат выполнения кода:
"issn is valid"