先吐槽一下,大家千万不要买 夏磊写的ThinkPHP实战这本书,写的奇烂无比,而且原书附的源码错漏百出。本文章的这个问题就是这本书中源码的错误,把模型作为会话,用会话传递模型对象,在官网上加V程序员回复这是错误用法,而这本书的作者就这么用,所以源码一用就报错。没见过这么烂的书。
下面是错误提示:method_exists(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "app\common\model\User" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide an autoloader to load the class definition源代码的逻辑是这样的: const SESSION_KEY = 'user'; 定义常量 $user = User::get($userId); 模型查询表
session(self::SESSION_KEY, $user); 把模型赋值给会话 $user = session(self::SESSION_KEY); 在其他方法里再用会话传递还原模型对象
这作者想的是挺简单,但模型对象是不能转换为会话,用会话传递模型对象是十几年前的作法。
在PHP升级到5.2以后,这样是不被支持的,临时的解决方案是,序列化传递过来的模型对象,先暂时用着。代码如下: $user = session(self::SESSION_KEY);$user=serialize($user);
|