简体   繁体   English

Session\\Container 定义上的 Zf2“迭代器类不存在”

[英]Zf2 "The iterator class does not exist" on Session\Container definition

Sometimes on my website (ZendFramework2), I get an error when setting a session variable.有时在我的网站 (ZendFramework2) 上,设置会话变量时会出错。 The error:错误:

PHP Fatal error:  Uncaught exception 'Zend\\Stdlib\\Exception\\InvalidArgumentException' with message 'The iterator class does not exist' in /MySite/vendor/zendframework/zendframework/library/Zend/Stdlib/ArrayObject/PhpReferenceCompatibility.php:374
Stack trace:
#0 /MySite/vendor/zendframework/zendframework/library/Zend/Stdlib/ArrayObject/PhpReferenceCompatibility.php(414): Zend\\Stdlib\\ArrayObject\\PhpReferenceCompatibility->setIteratorClass(NULL)
#1 [internal function]: Zend\\Stdlib\\ArrayObject\\PhpReferenceCompatibility->unserialize('a:4:{s:7:"stora...')
#2 /MySite/vendor/zendframework/zendframework/library/Zend/Session/SessionManager.php(95): session_start()
#3 /MySite/vendor/zendframework/zendframework/library/Zend/Session/AbstractContainer.php(78): Zend\\Session\\SessionManager->start()
#4 /MySite/module/Application/Module.php(97): Zend\\Session\\AbstractContainer->__construct('site')
#5 [internal function]: Application\\Module->onBootstrap(Object(Zend\\Mvc\\MvcEvent))
#6 /MySite/vendor/zendframework/zendframework/library/Zend/Stdlib/ArrayObject/PhpReferenceCompatibility.php on line 374

Code Module.php line 97 :代码 Module.php 第 97 行:

$s_site = new \Zend\Session\Container('site');

I try but I can not find why.我尝试,但我找不到原因。 Do you have any idea?你有什么主意吗? Need more informations?需要更多信息? Thank you.谢谢你。

The is a result of the setIteratorClass method in ArrayObject/PhpReferenceCompatibility being passed a null $class argument.这是 ArrayObject/PhpReferenceCompatibility 中的 setIteratorClass 方法传递空 $class 参数的结果。 I'm not sure why it sometimes gets a null, but the way I fixed it in my case was to set the iterator class as 'ArrayIterator' when passed a null object, like this:我不确定为什么它有时会得到一个空值,但我在我的情况下修复它的方法是在传递空对象时将迭代器类设置为“ArrayIterator”,如下所示:

if (!isset($class)) {
    $class = 'ArrayIterator';
}

在最新的 zf2 版本中, ArrayObject/PhpReferenceCompatibility类已被删除,因此请在stdlib/ArrayObject.php进行更改。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM