Правило EqualTo
Правило EqualTo является ограничением валидации и проверяет, что значение поля в форме строго равно указанному значению. Это правило обычно используется для подтверждения согласия с условиями, проверки правильности введённого кода подтверждения или сверки значения с эталоном. Первым параметром передаётся значение для сравнения, вторым - необязательное сообщение об ошибке, которое отображается при несовпадении.
Синтаксис
#[EqualTo(value: mixed, message: string)]
Пример
Давайте создадим форму с полем для ввода кода подтверждения. Значение должно быть равно строке 'abcde':
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
use SymfonyComponentValidatorConstraintsEqualTo;
use SymfonyComponentFormExtensionCoreTypeTextType;
class ConfirmType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('code', TextType::class, [
'constraints' => [
new EqualTo([
'value' => 'abcde',
'message' => 'The code must be exactly abcde.',
]),
],
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null,
]);
}
}
?>
Если пользователь введёт 'abcde', форма пройдёт валидацию. При вводе любого другого значения появится сообщение об ошибке.
Пример
Давайте проверим работу правила в контроллере. Отправим значение 'hello', которое не совпадает с ожидаемым:
<?php
namespace AppController;
use AppFormConfirmType;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ConfirmController extends AbstractController
{
#[Route('/confirm', name: 'app_confirm')]
public function confirm(Request $request): Response
{
$form = $this->createForm(ConfirmType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
return new Response('Form is valid.');
}
$errors = $form->getErrors(true, false);
foreach ($errors as $error) {
echo $error->getMessage();
}
return new Response('Form is invalid.');
}
}
?>
Результат выполнения кода при отправке значения 'hello':
"The code must be exactly abcde."
Смотрите также
-
правило
IdenticalTo,
которое проверяет полное совпадение значения и типа -
правило
NotBlank,
которое проверяет, что поле не пустое -
правило
Regex,
которое проверяет значение по регулярному выражению -
метод
isValid,
который проверяет, прошла ли форма валидацию