2012-04-14 54 views
2

我的模型類的構造函數的模型:笨加載的具有參數

<?php class Permissions extends CI_Model { 

    private $userID = ''; 
    private $permissions = ''; 

    function __construct($userID) 
    { 
     // Call the Model constructor 
     parent::__construct(); 

     $this->userID = $userID; 
     .... 
    } 
    function __construct() 
    {.....} 
?> 

,我想用一個參數來加載該模型,顯然我不能這樣做。 如果參數我可以通過這種方式加載參數的構造函數:

$this->load->model('Permissions'); 

我的第一個問題:加載帶有參數廢話模型? 第二個:如果可行,我該怎麼做? 在此先感謝。

+1

您可能需要調整loader類以創建一個方法,它複製'model()'方法但接受參數。然後你調用'$ this-> load-> modelnew('modelname',$ param)'。哦,你需要創建一個擴展了CI_Model類的MY_Model類。 – 2012-04-14 09:40:37

+0

可能你是對的,但是加載它後調用init函數要容易得多。仍然感謝關注。 – guness 2012-04-14 11:03:01

回答

1

你可以看看這個論壇主題:http://codeigniter.com/forums/viewthread/115681/

但我不明白爲什麼你會想給一個用戶ID在權限檢查的方式的參數?猜測你使用會話來保存用戶數據,在會話中編寫用戶標識,並在模型中用$ this-> session-> userdata('user_id')調用它。

快樂編碼!

+0

我會試試看,謝謝你的想法。 – guness 2012-04-14 11:05:06

+3

請給解決方案,而不是鏈接到解決方案。隨着時間的推移,該鏈接可能變得無法訪問,就像它爲此所做的那樣。 – Yash 2015-03-21 16:17:48

0

您可以在模型的功能級別中進行自定義。如果你提供爲什麼要擴展模型,我可以說它是否有意義。如果你想創建一個用戶特定的規則,你最好在控制器上做。

class Shop_m extends CI_Model { 

function getProductPriceInfo($cat,$id) { 
     $this->db->where('shop_price.catid', $cat); 
       $this->db->where('shop_price.relid', $id); 
       $this->db->select('optional.title,optional.desc,shop_price.*'); 
       $this->db->join('optional', 'optional.id = shop_price.relid'); 
     $q = $this->db->get('shop_price'); 
     if($q->num_rows() > 0) { 
      foreach ($q->result() as $row) { 
       $data[] = $row; 
      } 
     return $data; 
     } 
    } 
+0

我將擁有不同權限的不同lvl用戶。我從數據庫中獲取這個權限,所以我使用了Model。使用我的模型,我將檢查用戶是否:列出某些產品或編輯某些產品。使用控制器還是更好? (PS:我是codeigniter的新手,而不是專業的PHP。) – guness 2012-04-14 11:20:35

+1

我會在控制器級別上做到這一點。因爲所有的邏輯最好在你的控制器中。您可以從模型獲取有關權限的數據,並檢查控制器上的權限。我會創建一個幫助程序或庫來檢查權限。例如,如果您要創建僅限會員的部分,則可以檢查該部分的控制器是否允許用戶執行此操作。或者,如果您想檢查用戶是否有權更改某些數據,則最好檢查更新數據的控制器上的權限。簡而言之,在您的控制器上制定每個規則。 – dorayaki 2012-04-14 11:49:01

+1

具體而言,當您列出某些產品時,用戶可以訪問一個控制器,該控制器從模型獲取數據並將數據加載到視圖。因此,您可以檢查用戶在訪問該控制器時是否有權列出產品。如果他有權限,請使用模型獲取數據並將其加載到視圖中,否則會出現錯誤,如'您無權訪問此部分'。 – dorayaki 2012-04-14 11:53:27

3

你可以實例化它自己的類,而不是加載它。

$ permission = new Permission($ param);