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

10

我是CI的新手。之前我在RoR和Symfony上有很多工作经验。

我无法理解为什么CI提供Library和Models。我检查过的大部分CI代码通常将Library用作Model的包装器。 Models专门用于与数据库通信。

有人可以解释一下吗?

2个回答

21

可能还有其他观点,但在我看来是这样的:

模型

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

库松散耦合。它们应该像第三方附加组件一样对待,并且不应对您的应用程序或系统做出任何假设。您应该能够随意“插入”库,并进行最少量的配置。实际上,相反的情况应该成立,即库文件夹中的项目可以被放置到任何其他CI应用程序中。


关于您对库的看法,我认为在CI中通过“模块”实现了所述功能。 - Eastern Monk
3
有时候概念会有重叠,但是可以将库视为一个单例类,它大多数情况下(如果不是完全独立于特定的CI应用程序)都是独立的。对于你能够做什么没有严格的规定,但如果你想知道库应该做什么,可以查看一些本地CI库,比如image_lib。 - treeface

2
图书馆的基本思想是通过类来扩展Codeigniter的功能。
如果您比较一下 Codeigniter 中 LibraryModel 的基本结构,您会发现,Model 扩展了 CI_MODEL,这使您能够访问 Codeigniter 的本地资源(例如,$this->db)。 Library 不提供这种基本访问,也不需要通过 CI_MODEL 进行扩展。 Model 用于描述和操作数据(主要是从数据库中抽象出来的,例如 mysql)。
看一下基本的 Library
<?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...
    }
}

在大多数情况下,模型准备使用资源来访问数据库或其他功能。而库则不会。如果您需要它们,您需要手动包含或扩展资源:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接