我有一个困扰我的建筑问题。
Codeigniter定义了model。现在有时候模型与另一个模型紧密相连。即用户和安全。
访问模型中的其他模型是不好的做法?
即。
class User extends CI_model
{
function getUser()
{
$this->load->model('User');
$user = // load user
$this->load->model('Security');
$security = // load security
$user->security = $security;
}
}
有些人怎么感觉不到'犹太教'给我。感觉我需要在顶部安装DAO或某种DAL,然后可以加载两个模型并执行必要的提取,同时在模型中保留基本的CRUD和模型特定操作。如果我们确实创建了一个单独的层,那么将它们放在Codeigniter框架中似乎不是一个合理的位置。
答案 0 :(得分:4)
这是可悲的部分:CodeIgniter没有实现MVC设计模式。它只是模仿Rails架构。有区别。
CodeIgniter中所谓的“模型”通常是active record(反)模式的实现。它们将域业务逻辑的职责与存储逻辑相结合。
因此,如果您正在使用标准CI代码,那么您不应该这样做。您无法在另一个CI_Model
实例中调用$this->load->model()
,因为它没有此类功能CI_Controller
。
相反,您必须覆盖默认的__construct()
,它将访问CI的全局实例并将其绑定到$this->load
变量。基本上这将是一个黑客。
最好在控制器中实例化“模型”并手动注入这些依赖项。
然后再次..你正在使用CodeIgniter,所以谁关心开发原则。
答案 1 :(得分:0)
查看DataMapper ORM
DataMapper ORM for CodeIgniter
来自网站:
DataMapper是一个用PHP编写的CodeIgniter对象关系映射器。它旨在将您的数据库表映射到易于使用的对象,完全了解彼此之间的关系。