symfony2 中的非重叠选择列表

问题描述 投票:0回答:1

使用 Symfony 2.2.4。

我有一个带有两个选择列表(多个,非扩展)的表单,显示相同的元素(类的实体)。当用户从两个选择列表中选择相同的元素时,我需要抛出错误(onsubmit)。有没有一种方法可以验证此选择,不需要遍历两个列表来检查每个元素,您知道,就像自动/内置验证一样。

我需要捕获错误并将其绑定到一个选择列表,以便我可以将其显示为任何其他错误,即通过 form_errors(form)。

任何提示表示赞赏。

php symfony validation multiple-choice
1个回答
1
投票

最简单的方法是在AbstractType类的buildForm中添加监听器,这里有一个例子

    $builder->addEventListener(
        FormEvents::POST_SUBMIT,
        function (FormEvent $event) {
            $form = $event->getForm();
            $coll1 = $form['field1']->getData();
            $coll2 = $form['field2']->getData();
            $ids1 = $coll1->map(function($entity) { return $entity->getId(); })->toArray();
            $ids2 = $coll1->map(function($entity) { return $entity->getId(); })->toArray();
            $intersect = array_intersect($ids1, $ids2);
            if (!empty($intersect)) {
                $form['field1']->addError(
                    new FormError('here the error')
                );
            }
        }
    );

请注意,我还没有测试集合的交集,但我希望含义清楚

另一种(有点难)的方法是创建自定义验证约束

这里是来自 symfony 文档的食谱

© www.soinside.com 2019 - 2024. All rights reserved.