Правило Isbn
Правило Isbn относится к классу ограничений
валидации Symfony и применяется к полю формы
или свойству сущности. Оно проверяет, что
переданное значение является корректным
ISBN-10 или ISBN-13. Первым параметром можно
передать тип ISBN: isbn10, isbn13
или null для проверки обоих форматов.
Также доступны параметры message и
normalizer.
Синтаксис
new Isbn(
type: null,
message: 'The value is not a valid ISBN.',
normalizer: null,
)
Пример
Давайте создадим форму с полем isbn и
повесим на него правило Isbn:
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
use SymfonyComponentValidatorConstraintsIsbn;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('isbn', TextType::class, [
'constraints' => [
new Isbn(),
],
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null,
]);
}
}
?>
Пример
Давайте проверим значение поля через форму в контроллере:
<?php
namespace AppController;
use AppFormArticleType;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_form')]
public function index(Request $request): Response
{
$form = $this->createForm(ArticleType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
return new Response('valid isbn');
}
return $this->render('article/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Результат выполнения кода при корректном ISBN:
"valid isbn"
Пример
Давайте зададим тип ISBN явно через параметр
type:
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
use SymfonyComponentValidatorConstraintsIsbn;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('isbn', TextType::class, [
'constraints' => [
new Isbn(type: 'isbn13'),
],
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null,
]);
}
}
?>
Результат выполнения кода при значении
'978-3-16-148410-0':
"valid isbn13"
Пример
Давайте изменим сообщение об ошибке через
параметр message:
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
use SymfonyComponentValidatorConstraintsIsbn;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('isbn', TextType::class, [
'constraints' => [
new Isbn(
type: 'isbn10',
message: 'Invalid ISBN: {{ value }}.',
),
],
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null,
]);
}
}
?>
Результат выполнения кода при значении
'abcde':
"Invalid ISBN: abcde."