Правило Ip
Правило Ip относится к секции form и проверяет,
что значение поля является допустимым IP-адресом.
По умолчанию принимаются адреса как IPv4, так и IPv6.
Правило вешается на поле формы через опцию constraints.
В параметрах можно указать версию протокола ipv4
или ipv6, а также флаг normalizer для приведения
адреса к каноническому виду.
Синтаксис
new Ip([
'version' => 'ipv4',
'normalizer' => 'trim',
'message' => '...',
])
Пример
Давайте создадим форму с полем ip и повесим на него правило Ip:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\Ip;
class IpType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('ip', TextType::class, [
'constraints' => [
new Ip(),
],
]);
}
}
?>
Пример
Давайте отправим в поле корректный IPv4-адрес:
<?php
namespace App\Controller;
use App\Form\IpType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class IpController extends AbstractController
{
public function index(Request $request): Response
{
$form = $this->createForm(IpType::class);
$form->submit(['ip' => '192.168.0.1']);
if ($form->isValid()) {
return new Response('valid');
}
return new Response('invalid');
}
}
?>
Результат выполнения кода:
"valid"
Пример
Давайте отправим в поле некорректный IP-адрес:
<?php
namespace App\Controller;
use App\Form\IpType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class IpController extends AbstractController
{
public function index(Request $request): Response
{
$form = $this->createForm(IpType::class);
$form->submit(['ip' => '999.999.999.999']);
if ($form->isValid()) {
return new Response('valid');
}
return new Response('invalid');
}
}
?>
Результат выполнения кода:
"invalid"
Пример
Давайте ограничим правило только IPv6, передав параметр version:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\Ip;
class IpType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('ip', TextType::class, [
'constraints' => [
new Ip([
'version' => 'ipv6',
]),
],
]);
}
}
?>