Як обирати групи валідації, засновані на відправлених даних
Дата оновлення перекладу 2022-11-20
Як обирати групи валідації, засновані на відправлених даних
Якщо вам потрібна просунута логіка, щоб визначити групи валідації (наприклад,
засновані на відправлених даних), ви можете встановити опцію validation_groups
у зворотному виклику масиву:
1 2 3 4 5 6 7 8 9 10 11 12 13
use App\Entity\Client;
use Symfony\Component\OptionsResolver\OptionsResolver;
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => array(
Client::class,
'determineValidationGroups',
),
));
}
Це викличе статичний метод determineValidationGroups()
у класі Client
після того, як форма буде відправлена, але до виконання валідації. Обʼєкт Форма
передається в якості аргументу до цього методу (дивіться наступний приклад). Ви
можете також визначити всю логіку лінійно, використовуючи Closure
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
use App\Entity\Client;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => function (FormInterface $form) {
$data = $form->getData();
if (Client::TYPE_PERSON == $data->getType()) {
return array('person');
}
return array('company');
},
));
}
Використання опції validation_groups
перевизначає використовувану за замовчуванням
групу валідації. Якщо ви також хочете валідувати обмеження сутності за замовчуванням,
то вам потрібно налаштувати опцію наступним чином:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
use App\Entity\Client;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => function (FormInterface $form) {
$data = $form->getData();
if (Client::TYPE_PERSON == $data->getType()) {
return array('Default', 'person');
}
return array('Default', 'company');
},
));
}
Ви можете знайти більше інформації про те, як працюють групи валідації та обмеження за замовчуванням у статті про Групи валідації.