如何构建不是来自数据库表的Codeigniter“模型”

时间:2018-01-17 15:27:07

标签: php codeigniter

Codeigniter模型通常专门与数据库表(或多个表)绑定。

我们发现我们使用的某些对象具有成员变量和方法,但与数据库中的特定表无关。

此类对象的一个​​示例是来自OpenStreetMap Web服务的OSMAddress返回。 This has fields(取决于地点):

  • 门牌号
  • 建筑
  • 城市
  • 国家
  • COUNTRY_CODE

这自然适合传递,因此我们创建了一个PHP类来封装它。

麻烦的是,我们不确定这个班级应该住在哪里。获取信息的操作是CodeIgniter helper函数,但OSMAddress不是帮助者。

我们使用标准的CodeIgniter结构:

CodeIgniter Structure

所以:

  1. 如果这些类不是模型,那么它们被称为什么?
  2. 他们应该住在哪里?

2 个答案:

答案 0 :(得分:2)

Helpers只能拥有一堆全局访问的可重用函数/方法,这些函数/方法可用于特定目的。在这里你不能定义任何类。

我认为你的意思是库,这些库将包含类似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
    }  
}

有关更多文档,请参阅docs

希望这可以帮到你。

答案 1 :(得分:1)

如果这些类扩展CI_Model,那么它们可能应该在models目录中。

如果它们没有扩展任何东西 - 换句话说,它们是自定义class - 那么它们可能属于libraries目录。它们可以被称为“图书馆”。

也就是说,“模型”不必仅与表和/或数据库方法相关。许多开发人员将它们视为“业务逻辑”或任何数据操作的地方,即使不涉及数据库。

没有真正的对错。这是“关注点分离”对您和您的团队最有意义的问题。

还有一件事。如果文件没有定义class,那么它就是“帮助者”。