首页 > 解决方案 > 实现变量回调错误消息

问题描述

我想根据其中一个语句失败返回一条可变if消息,但我不知道如何在一个验证器中这样做。我不太确定在这种情况下最佳做法是什么。这两个if语句都需要$entity, 并将其拆分为单独的验证器意味着我必须多次查询它才能进行验证。

        'validators' => [
            [
                'name'    => ValidatorCallback::class,
                'options' => [
                    'callback' => function ($value) {
                        $entity= $this->getObjectManager()
                                             ->getRepository(SalesChannel::class)
                                             ->find($value);

                        if (is_null($entity)) {
                            //No entity found with the given id.
                            return false;
                        }

                        if ($value !== $entity->getParent()->getId()) {
                            //Wrong parent
                                return false;
                            }
                        },
                        'messages' => [
                            'callbackValue' => _(
                                'Error, ...... is wrong'
                            ),
                        ],
                    ],
                ],
            ],

标签: phpvalidationzend-frameworkzend-framework3laminas

解决方案


如我所见,作为 ORM 您正在使用 Doctrine 2 吗?在文档中,您可以找到有关身份映射模式实体和身份映射的部分。

最重要的信息是:

...无论您多久从 EntityManager 检索它,甚至无论您使用哪种查询方法(查找、存储库查找器或 DQL)。这称为身份映射模式,这意味着 Doctrine 保留每个实体和每个 PHP 请求检索到的 id 的映射,并不断返回相同的实例。

如您所见,您可以将其拆分为单独的验证器,而不会影响性能。


推荐阅读