CodeIgniter Framework中的库和模型有什么区别?

时间:2010-11-22 14:45:51

标签: php codeigniter

我是CI的新手。在我在RoR和Symfony工作之前。

我无法理解为什么CI提供了图书馆和模型。我检查的大多数CI代码通常使用Library作为Model周围的包装器。模型专门用于与数据库通信。

有人可以对此嗤之以鼻吗?

2 个答案:

答案 0 :(得分:19)

可能还有其他的思想流派,但对我而言如下:

模型

模型与您的应用程序紧密耦合,直接引用您的数据库模式/体系结构/文件路径等。

图书馆松散耦合。它们应该被视为第三方附加组件,并且不应对您的应用程序或系统做任何假设。您应该能够以最少的配置随意“插入”库。实际上,情况恰恰相反,库文件夹中的项目应该可以放入任何其他CI应用程序中。

答案 1 :(得分:1)

Libraries 上的basci思想是一种通过类扩展Codeigniter功能的方法。

如果您比较Codeigniter中模型的空白解剖结构,您会看到模型扩展 CI_MODEL ,它允许您访问Codeigniter的本机资源(例如 $ this-> db )。

图书馆不提供基本访问权限,也不需要通过 CI_MODEL 进行扩展。

模型用于描述数据并与数据交互(主要是从诸如mysql之类的数据库中抽象出来的)。

查看基本的图书馆

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class Library{

   public function MyFunction(){
      //do something...
   }

}

...和模型解剖

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class User_model extends CI_Model {

   public function __construct(){
        parent::__construct();            
    }

    public function MyFunction(){
        //do something...
    }
}

在大多数情况下,模型准备使用Ressources来访问数据库或其他功能。图书馆没有。如果需要,您需要手动包含或扩展Ressource:

//Create an CI instance
$CI =& get_instance();

是工具集和功能扩展,而模型本身非常适合抽象和与来自数据库的数据进行交互。