一元网络论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5125|回复: 1

ThinkPHP,八、session会话作为模型对象使用,用于传递对象...

[复制链接]

3万

主题

3万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
93367
发表于 2020-11-22 15:17:03 | 显示全部楼层 |阅读模式

先吐槽一下,大家千万不要买  夏磊写的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);



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|一元网络论坛

GMT+8, 2024-11-21 17:50 , Processed in 0.104625 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表