我目前在 codeigniter 中重新设计我的项目以设置它,以便我有一个 User.php 超类。然后这个类有 2 个子类“carer_user”和“admin_user”当记录时我在超类中有一个名为 login 的方法,首先调用谁的索引。在此之后,我将决定正在登录的用户类型并显示该特定用户类型的相关页面。每个都是不同的。我如何设置它目前对我来说似乎是错误的,因为我在超类用户中有登录名。对于每个用户类型的设置略有不同,对数据库运行不同的查询,以不同的方式创建会话。我也不认为从登录已验证的超类调用子类方法是正确的做法。我的问题是/是这个。login 应该在它自己的控制器类中吗?一旦在这里完成验证,我就可以根据结果在 admin_user 或 carer_user 中调用一个方法。或者我应该坚持我现在做的方式,我的代码如下所示,用于我的用户控制器方法。谢谢!
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class User extends CI_Controller {
var $loggedin = FALSE;
var $cdata;
var $privilege;
function __construct()
{
parent::__construct();
$this->load->model("dbaccess");
$this->cdata =array( "warning" => "","email"=> "","password"=> "","logintime"=>"","start"=>"","end"=>""
,"diff"=>"","totalhours"=>"","dis"=>$this);
}
public function index()
{
if($this->session->userdata('email'))
{
$this->load->view('carerview',$this->cdata);
}
else
{
$this->load->view('mainview',$this->cdata);
}
}
public function login()
{
if(isset($_POST['email']) && isset($_POST['password']))
{
$this->cdata['email'] = $_POST['email'] ;
$this->cdata['password'] = $_POST['password'] ;
}
if($this->cdata['email'] !=="" && $this->cdata['password'] !=="" && $this->loggedin === FALSE)
{
$this->loggedin = $this->dbaccess->check_input($this->cdata['email'],$this->cdata['password']);
if($this->loggedin)
{
$data =array("email"=>$this->cdata['email']);
$this->privilege = $this->dbaccess->get_privilege($data,"userinfo");
$this->open_page();
$this->loggedin= TRUE;
}
else
{
$this->cdata['warning']="Check failed ! Please try again";
$this->load->view('mainview',$this->cdata);
}
}
else if($this->loggedin ===TRUE)
{
//check helpermethod. go to relevant page.
$this->open_page();
}
else
{
$this->cdata['warning']="Check failed ! Please try again";
$this->load->view('mainview',$this->cdata);
}
}
private function open_page()
{
switch($this->privilege)
{
case 0 :
$this->carerview();
break;
case 1:
$this->admin();
break;
}
}
}
?>
我的问题再次是登录方法应该放在哪里?而且我真的不能有一个超类在它的一个子类中调用一个方法。