symfony 相关实体的验证者

wgxvkvu9  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(110)

我有两个实体,我想有一个自定义验证器约束,以确保两个实体共享一个值。
范例:

实体地域:

  • 拥有菲尔德城
  • 具有多个房屋作为OneToMany关系
  • 限制只允许拥有相同城市的房屋
    实体之家:
  • 拥有菲尔德城
  • 具有一个区域作为多对一关系

您的回答与任何提示如何实现这一点是高度赞赏。

9vw9lbht

9vw9lbht1#

这里有一个解决方案来实现你想要做的事情:
在FormType中,在PRE_SUBMIT上添加一个事件侦听器,并像这样添加约束:

use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Validator\Constraints\EqualTo;

// ...

$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
    $data = $event->getData();
    $form = $event->getForm();

    if (isset($data['cityA'])) {
        $form->add('cityB', TextType::class, [
            'constraints' => [
                new EqualTo([
                    'value' => $data['cityA'],
                    'message' => 'Must be the same as cityA',
                ]),
            ],
        ]);
    }

    // Here other constraints
});

字符串

相关问题