Php 实现变量回调错误消息

Php 实现变量回调错误消息,php,validation,zend-framework,zend-framework3,laminas,Php,Validation,Zend Framework,Zend Framework3,Laminas,如果语句失败,我想返回一个变量消息,该消息基于其中一个,但我不知道如何在一个验证器中执行该操作。我不太确定在这种情况下最好的做法是什么。这两个if语句都需要$entity,将其拆分为单独的验证器将意味着我必须多次查询它以进行验证 'validators' => [ [ 'name' => ValidatorCallback::class, 'options' => [

如果语句失败,我想返回一个变量消息,该消息基于其中一个
,但我不知道如何在一个验证器中执行该操作。我不太确定在这种情况下最好的做法是什么。这两个
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'
                            ),
                        ],
                    ],
                ],
            ],

正如我所看到的,作为一个ORM,你使用的是条令2? 在文档中,您可以找到关于身份映射模式的部分

最重要的信息包括:

。。。无论您从EntityManager检索它的频率有多高,甚至无论您使用的是哪种查询方法(find、Repository Finder或DQL)。这称为身份映射模式,这意味着条令保留每个PHP请求检索到的每个实体和ID的映射,并不断返回相同的实例


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

我没有想到ORM会进行缓存。谢谢这回答了我的问题!