Як динамічно конфігурувати групи валідації форм
Дата оновлення перекладу 2022-11-20
Як динамічно конфігурувати групи валідації форм
Іноді вам потрібна просунута логіка, щоб визначати групи валідації. Якщо вони не
можуть бути визначені зворотним викликом, ви можете використати сервіс. Створіть
сервіс, що реалізує __invoke()
, який приймає FormInterface
в якості параметра:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
// src/Validation/ValidationGroupResolver.php
namespace App\Validation;
use Symfony\Component\Form\FormInterface;
class ValidationGroupResolver
{
private $service1;
private $service2;
public function __construct($service1, $service2)
{
$this->service1 = $service1;
$this->service2 = $service2;
}
public function __invoke(FormInterface $form): array
{
$groups = [];
// ... визначити, які групи застосувати, та повернути масив
return $groups;
}
}
Потім, у вашій формі, впровадьте розвʼязувач, та встановіть його як validation_groups
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
// src/Form/MyClassType.php;
namespace App\Form;
use App\Validation\ValidationGroupResolver;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver;
class MyClassType extends AbstractType
{
private $groupResolver;
public function __construct(ValidationGroupResolver $groupResolver)
{
$this->groupResolver = $groupResolver;
}
// ...
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'validation_groups' => $this->groupResolver,
]);
}
}
Це призведе до того, що валідатор форми викликатиме ваш розвʼязувач групи, щоб встановити групи валідації, які будуть повертатися при валідації.