我正在尝试使用codeigniter通过面向对象的编程来设计网站。
我对如何创建对象实例以及在甚至不同方法的某些特定控制器中保持持久性和可用有点担忧同一个控制器。
想象一下,我有一个用户类及其所有属性和方法,我想创建它的实例。知道在私有区域中该实例应该已经创建并可用,通过不同方法或控制器从私有区域访问它的最佳方式是什么?
我应该创建它的实例并从MY_private_controller继承访问吗?实例"幸存下来"或者MY_private_controller中的方法需要为我调用的每个不同方法创建一个新方法吗? 使用php实现持久化实例的最佳实践是什么?
谢谢
答案 0 :(得分:0)
假设您的控制器中的每个方法都会被调用来处理来自Web浏览器的不同请求,那么除了每次都创建User
实例之外别无选择。
这是因为php应用程序生命周期是这样的:
因此,在每个请求中,您的应用程序都从头开始,处理请求并终止。检查PHP is meant to die。
答案 1 :(得分:0)
首先从模型返回用户。您可以在任何地方执行此操作,只需将其置于if条件中,因此如果找不到该用户,则可以处理该错误。如果用户已经登录,则可以在控制器构造函数中返回用户。例如,名为Useradmin的控制器
class Useradmin extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->model( 'users' );
// if we do not get a user back, then redirect to login
if( ! $this->user = $this->users->returnActiveUser() )
{
redirect("login/index") ;
}
}
所以现在$ this->用户可用于控制器中的任何方法,这些方法调用的任何模型以及加载的任何视图。您还可以更新$ this->用户,它将使用更新版本用于任何后续方法。