Правило IsFalse
Правило IsFalse вешается на поле формы
и проверяет, что его значение равно false.
Если значение не равно false, валидация
завершается ошибкой. Это правило удобно
применять к чекбоксам, которые должны быть
сняты, например для подтверждения согласия
с условиями.
Синтаксис
#[IsFalse]
Пример
Давайте создадим форму с чекбоксом и повесим
на поле правило IsFalse. Сначала создадим
контроллер с формой:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Validator\Constraints\IsFalse;
use Symfony\Component\Form\FormFactoryInterface;
class FormController extends AbstractController
{
public function form(FormFactoryInterface $factory, Request $request): Response
{
$builder = $factory->createBuilder(FormType::class);
$builder->add('agree', CheckboxType::class, [
'label' => 'Agree to terms',
'constraints' => [
new IsFalse(),
],
]);
$builder->add('save', SubmitType::class, ['label' => 'Submit']);
$form = $builder->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
return new Response('form valid');
}
return $this->render('form/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Теперь создадим Twig-шаблон для вывода формы:
{{ form_start(form) }}
{{ form_row(form.agree) }}
{{ form_row(form.save) }}
{{ form_end(form) }}
Если отправить форму с установленным чекбоксом, валидация завершится ошибкой. Результат выполнения кода при снятом чекбоксе:
"form valid"
Пример
Давайте выведем сообщение об ошибке валидации
для поля с правилом IsFalse. Для этого
передадим параметр message:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Validator\Constraints\IsFalse;
use Symfony\Component\Form\FormFactoryInterface;
class FormController extends AbstractController
{
public function form(FormFactoryInterface $factory, Request $request): Response
{
$builder = $factory->createBuilder(FormType::class);
$builder->add('agree', CheckboxType::class, [
'label' => 'Agree to terms',
'constraints' => [
new IsFalse([
'message' => 'The checkbox must be unchecked.',
]),
],
]);
$builder->add('save', SubmitType::class, ['label' => 'Submit']);
$form = $builder->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
return new Response('form valid');
}
return $this->render('form/index.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Результат выполнения кода при установленном чекбоксе:
"The checkbox must be unchecked."