我正在编写我的第一个CodeIgniter应用程序(非常熟悉PHP,但不熟悉CI)并进行以下设置:
我有一个控制器,Signup,用于控制注册过程。控制器的每个功能都是该过程的下一步。我有一个对象Did
,我目前正在加载它作为库。随着注册过程的进行,此对象的属性/变量会更新。
我遇到的问题是Signup控制器的一个函数的属性不会转移到下一个函数。就好像每个函数都重构了类。
有没有办法在整个控制器中重用该类而不必重新实例化?我不想在会话中序列化和存储。
提前致谢。
答案 0 :(得分:2)
您遇到的问题是,您要根据应用程序的内存中状态保留请求。
您希望您的类在请求之间使用Did
对象的相同实例化。
这不是PHP / HTTP的工作原理。每个请求都是单独处理的,它是您自己的应用程序实例。因此,每个请求都会创建一个新的Did
对象。
要保持状态,您需要使用Sessions在请求之间传递信息,使用数据库来处理持久状态,或两者的组合。
答案 1 :(得分:2)
与往常一样,对同一问题有很多解决方案。如果它不适合您的实施,请忽略它。
保持对象中的注册步骤是个好主意 - 但是,每次加载新页面时,CI都会重建所有对象。为了使数据持久存在,它应该存储在会话中,但这并不意味着你必须在控制器中使用会话变量。
您如何将数据传输到您的应用程序?是通过表格还是ajax?
您可以通过从会话中反序列化对象并将其作为对象存储在控制器的构造函数中来实现。这样你仍然可以对它运行$ myObj-> function()并使用$ myObj-> save()函数来重新序列化并存储它。
希望有所帮助!