我是CI的新手。在我在RoR和Symfony工作之前。
我无法理解为什么CI提供了图书馆和模型。我检查的大多数CI代码通常使用Library作为Model周围的包装器。模型专门用于与数据库通信。
有人可以对此嗤之以鼻吗?
答案 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();
库是工具集和功能扩展,而模型本身非常适合抽象和与来自数据库的数据进行交互。