在Codeigniter项目中遇到设计问题,使用继承


having trouble with design in codeigniter project, using inheritance

我目前正在codeigniter中重新设计我的项目以对其进行设置,以便我有一个User.php超类。 然后,此类有 2 个子类"carer_user"和"admin_user" 当日志记录时,我在超类中有一个名为 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;

    }
}
}
?>

同样,我的问题是应该将登录方法放在哪里? 事实上,我不能真正有一个超类在其子类之一中调用方法。

多重继承是不可能的。您可以使用接口。请看这里以获得更好的解释 https://github.com/sepehr/ci-base-controllers