跳到内容

如何动态配置表单验证组

编辑此页

有时您需要高级逻辑来确定验证组。如果它们无法通过回调确定,您可以使用服务。创建一个实现 __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 许可获得许可。
目录
    版本