如何动态配置表单验证组
有时您需要高级逻辑来确定验证组。如果它们无法通过回调确定,您可以使用服务。创建一个实现 __invoke()
的服务,它接受 FormInterface
作为参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
// src/Validation/ValidationGroupResolver.php
namespace App\Validation;
use Symfony\Component\Form\FormInterface;
class ValidationGroupResolver
{
public function __construct(
private object $service1,
private object $service2,
) {
}
public function __invoke(FormInterface $form): array
{
$groups = [];
// ... determine which groups to apply and return an array
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
// 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
{
public function __construct(
private ValidationGroupResolver $groupResolver,
) {
}
// ...
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'validation_groups' => $this->groupResolver,
]);
}
}
这将导致表单验证器调用您的组解析器来设置验证时返回的验证组。
这项工作,包括代码示例,根据 Creative Commons BY-SA 3.0 许可获得许可。