Правило Regex
Правило Regex относится к ограничениям (constraints) и вешается
на поле формы или свойство сущности. Оно проверяет, что значение
соответствует заданному регулярному выражению. Первым параметром
передаётся шаблон регулярного выражения. Если значение не совпадает
с шаблоном, форма считается невалидной, а к полю прикрепляется
сообщение об ошибке.
Синтаксис
#[Assert\Regex(pattern: '/шаблон/', message: 'текст ошибки')]
Пример
Давайте создадим форму с полем code и навесим на него
правило Regex, разрешающее только латинские буквы:
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentValidatorConstraints as Assert;
use SymfonyComponentOptionsResolverOptionsResolver;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('code', TextType::class, [
'constraints' => [
new Assert\Regex([
'pattern' => '/^[a-z]+$/',
'message' => 'Код может содержать только строчные латинские буквы.',
]),
],
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([]);
}
}
?>
Пример
Давайте обработаем форму в контроллере и выведем результат проверки:
<?php
namespace AppController;
use AppFormArticleType;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
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');
}
}
?>
Результат выполнения кода при значении 'abcde':
"form is valid"
Результат выполнения кода при значении 'abc123':
"form is invalid"
Пример
Давайте навесим правило Regex прямо на свойство сущности:
<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
use SymfonyComponentValidatorConstraints as Assert;
#[ORM\Entity]
class Article
{
#[ORM\Column(type: 'string', length: 255)]
#[Assert\Regex(
pattern: '/^[a-z]+$/',
message: 'Значение может содержать только строчные латинские буквы.',
)]
private string $code = '';
public function getCode(): string
{
return $this->code;
}
public function setCode(string $code): self
{
$this->code = $code;
return $this;
}
}
?>
Пример
Давайте используем параметр match со значением false,
чтобы значение, наоборот, не совпадало с шаблоном:
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentValidatorConstraints as Assert;
use SymfonyComponentOptionsResolverOptionsResolver;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('login', TextType::class, [
'constraints' => [
new Assert\Regex([
'pattern' => '/^admin$/',
'match' => false,
'message' => 'Логин admin запрещён.',
]),
],
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([]);
}
}
?>