[已解决]Laravel Swoole下 当控制器继承了一个trait类用于初始化用户的数据,在第一次访问时 能获取初始化的数据,第二次访问,数据并没有被初始化。
暂时改用静态数组/变量解决了,跟Swoole常驻内存模式有关
问题描述
是这样的,由于所有控制器在处理用户业务时需要先获取用户的一些初始化数据,所以我把这些初始化工作写在了一个类里,然后控制器去继承它并调用初始化方法。所有初始化的数据都存在初始化类的属性里。
然后我发现这样,当首次访问时,继承的属性里,都有初始化好的数据,但如果下一次访问,这些属性就是默认值了,似乎并没有调用初始化方法。在部署Swoole后,出现这种情况。
构造函数里的中间件貌似只走一次,后面的访问都不会经过
初始化类
控制器
下一次访问时
使用初始化类里的属性是默认值了,如图所示,那个使用的数据是一个默认值,空数组
希望得到的帮助
导致这个问题的原因
问题的解决方式
关于此需求更好的设计方法
有的,启动Swoole,第一次访问,正常。第二次就是类里设置的默认值,没有被初始化
比如那个$this->conf在初始化类里的构造函数里就赋值了,继承后只能在第一次有用。下次访问都是默认值
常驻内存下确实是这样的,最好变量不要设置成全局的形式。