[已解决]Laravel Swoole下 当控制器继承了一个trait类用于初始化用户的数据,在第一次访问时 能获取初始化的数据,第二次访问,数据并没有被初始化。

暂时改用静态数组/变量解决了,跟Swoole常驻内存模式有关

问题描述

是这样的,由于所有控制器在处理用户业务时需要先获取用户的一些初始化数据,所以我把这些初始化工作写在了一个类里,然后控制器去继承它并调用初始化方法。所有初始化的数据都存在初始化类的属性里。

然后我发现这样,当首次访问时,继承的属性里,都有初始化好的数据,但如果下一次访问,这些属性就是默认值了,似乎并没有调用初始化方法。在部署Swoole后,出现这种情况。

构造函数里的中间件貌似只走一次,后面的访问都不会经过

初始化类

控制器

下一次访问时

使用初始化类里的属性是默认值了,如图所示,那个使用的数据是一个默认值,空数组

希望得到的帮助

导致这个问题的原因
问题的解决方式
关于此需求更好的设计方法

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 19

有的,启动Swoole,第一次访问,正常。第二次就是类里设置的默认值,没有被初始化

file

2年前 评论
cccdz 2年前
威尼斯 (作者) (楼主) 2年前
JaguarJack 2年前
威尼斯 (作者) (楼主) 2年前
威尼斯 (作者) (楼主) 2年前
JaguarJack 2年前
cccdz 2年前
威尼斯 (作者) (楼主) 2年前
威尼斯 (作者) (楼主) 2年前
cccdz 2年前
cccdz 2年前
威尼斯 (作者) (楼主) 2年前
cccdz 2年前

file file file file

2年前 评论
威尼斯 (楼主) 2年前
威尼斯 (楼主) 2年前

比如那个$this->conf在初始化类里的构造函数里就赋值了,继承后只能在第一次有用。下次访问都是默认值

2年前
goStruct

常驻内存下确实是这样的,最好变量不要设置成全局的形式。

2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!