2013-10-10 42 views
0

Iam當前在codeigniter中對我的項目進行重新設置,以便擁有User.php超類。這個類然後有2個子類「carer_user」和「admin_user」當記錄我有一個稱爲登錄的方法在超級類的whos索引首先被調用。在此之後,我將決定登錄哪個用戶類型並顯示該特定用戶類型的相關頁面。每個都不同。我如何設置目前似乎是錯誤的,因爲我有在超類用戶登錄。對於每個用戶類型設置稍有不同,再次運行不同的查詢數據庫,創建會話不同。我也不認爲它正確的做法來調用一個超類的子類方法,一個登錄已被驗證。我的問題是這個。應該登錄到它自己的控制器類中嗎?一旦驗證完成,我可以在admin_user或carer_user中調用一個方法,具體取決於結果。或者我應該堅持使用iam的方式,我的代碼顯示在我的用戶控制器方法的下面。謝謝!在codeigniter項目中使用繼承時遇到問題

<?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; 


    } 
} 
} 

?> 

再次我的問題是這裏的登錄方法應該放在哪裏?以及我無法真正擁有超類在其中一個子類中調用方法的事實。

+0

多重繼承是不可能的。你可以再次使用接口 –

+0

,這不是多重繼承。除非ive失去了我的想法。 :) – eoin

回答

0

多重繼承是不可能的。你可以使用接口。 請在這裏查看更好的解釋https://github.com/sepehr/ci-base-controllers

+0

這只是普通的繼承,因爲只有一個超類!? – eoin

+0

好吧我想我只是設置了一個庫,登錄控制器可以用來創建不同類型的seeions,並在'carer_user'的情況下將數據發送到數據庫。 – eoin

+0

沒有人幫我解決這個問題,不能從另一個控制器中調用控制器對我來說有點問題。 iam將嘗試使用hmvc – eoin