Правило Range
Правило Range относится к ограничениям валидации Symfony
и вешается на поле формы или свойство сущности. Оно проверяет,
что переданное значение входит в заданный диапазон. Правило
принимает параметр min - нижнюю границу и max -
верхнюю границу. Границы можно не указывать: тогда проверяется
только одна из сторон диапазона. Правило работает с числами,
а также с датами и временем, если задать их в виде строки.
Синтаксис
#[Range(min: min, max: max)]
Пример
Давайте создадим форму с полем age и повесим на него
правило Range с диапазоном от 18 до 65:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\Range;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('age', IntegerType::class, [
'constraints' => [
new Range([
'min' => 18,
'max' => 65,
]),
],
]);
}
}
?>
Пример
Давайте проверим значение поля с помощью валидатора:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints\Range;
class UserController extends AbstractController
{
public function index(): Response
{
$validator = Validation::createValidator();
$constraint = new Range(['min' => 18, 'max' => 65]);
$res = $validator->validate(20, $constraint);
return new Response((string) count($res));
}
}
?>
Результат выполнения кода:
"0"
Пример
Давайте передадим значение, которое выходит за границы диапазона:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints\Range;
class UserController extends AbstractController
{
public function index(): Response
{
$validator = Validation::createValidator();
$constraint = new Range(['min' => 18, 'max' => 65]);
$res = $validator->validate(10, $constraint);
return new Response($res[0]->getMessage());
}
}
?>
Результат выполнения кода:
"This value should be between 18 and 65."
Пример
Давайте укажем только нижнюю границу диапазона:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints\Range;
class UserController extends AbstractController
{
public function index(): Response
{
$validator = Validation::createValidator();
$constraint = new Range(['min' => 0]);
$res = $validator->validate(5, $constraint);
return new Response((string) count($res));
}
}
?>
Результат выполнения кода:
"0"
Смотрите также
-
класс
Form,
который представляет форму в Symfony -
метод
isValid,
который проверяет валидность формы -
правило
Length,
которое проверяет длину строки -
правило
GreaterThan,
которое проверяет, что значение больше заданного