簡體   English   中英

如何構造不是來自數據庫表的Codeigniter“模型”

[英]How to structure Codeigniter “models” that do not come from a database table

Codeigniter模型通常專門與一個或多個數據庫表綁定。

我們發現有些對象具有成員變量和方法,但與數據庫中的特定表無關。

此類對象的一個​​示例是OpenStreetMap Web服務的OSMAddress返回。 它具有以下字段 (取決於位置):

  • 門牌號碼
  • 建造
  • 國家
  • 國家代碼

這很自然地使其易於傳遞,因此我們創建了一個PHP類來對其進行封裝。

麻煩的是,我們不確定這個班級應該住在哪里。 獲取信息的操作是CodeIgniter helper功能,但OSMAddress不是幫助程序。

我們正在使用標准的CodeIgniter結構:

CodeIgniter結構

所以:

  1. 如果它們不是模型,這些類又叫什么?
  2. 他們應該住在哪里?

助手只能具有一堆用於特定目的的全局訪問的可重用函數/方法。 在這里您不能定義任何類。

我認為您的意思是庫,其中將包含帶有類似Java中方法的類。 然后,可以根據需要在控制器類中使用這些庫。

例如:在您的情況下,您正在嘗試從Web服務獲取OSMAddress 您需要在庫文件夾下創建一個PHP文件來定義一個類。 application/library/your-file-name.php

定義一個類OSMaddress

class OSMaddress{
    public function __construct() {
        //define all your variables here
    }

    //define all your web service methods here
    public function function_1(){
        //your code
    }
}

完成后,將庫加載到控制器類中

class Address extends CI_Controller{
    public function __construct() {
        parent::__construct();
        $this->load->library('OSMaddress');
    }

    public function function-name(){
         //Now call your function from the library
         $data = $this->OSMaddress->function_1();
         //function_1 will return the data
    }  
}

有關更多文檔,您可以參考文檔

希望這可以幫到你。

如果這些類擴展了CI_Model則它們可能應該在models目錄中。

如果它們沒有擴展任何內容(換句話說,它們是自定義class ,則它們可能屬於庫目錄。 他們可以被稱為“圖書館”。

也就是說,“模型”不必僅與表和/或數據庫方法有關。 許多開發人員將它們視為“業務邏輯”或任何數據處理的地方,即使不涉及數據庫也是如此。

沒有真正的對與錯。 “關注點分離”對您和您的團隊最有意義。

還有一件事。 如果文件未定義class ,則為“幫助器”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM