2012-09-19 41 views
1

我有一个困扰我的建筑问题。在另一个CodeIgniter模型中加载模型是否合适?

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框架似乎不是一个合理的地方。

回答

4

这是可悲的:CodeIgniter不会自动实现MVC设计模式。它只是模仿Rails架构。它们是有区别的。

你所说的“模型”什么CI中,通常是实施active record(反)模式。它们将域业务逻辑的职责与存储逻辑相结合。

所以,如果你是标准的CI码的工作,那么你不应该这样做。您不能在另一个CI_Model实例中调用$this->load->model(),因为它不具备CI_Controller这样的功能。

相反,您将不得不覆盖默认的__construct(),它将访问CI的全局实例并将其绑定到$this->load变量。基本上这将是一个黑客。

你会好起来的实例在控制器中的“模式”,手动注入这些依赖。


然后再次..你使用CodeIgniter,所以谁在乎开发原则。

+0

单独增加了收盘价。 –

+0

我通常在库目录中创建一个类用作域对象,然后从那里加载所有需要的“模型”(因此这些模型只是一种数据映射器)。用这种方法,我只是在控制器中调用库类。否则,在大型应用中,仅使用CI“模型”的控制器会变得非常混乱。 –

0

退房DataMapper的ORM

DataMapper ORM for CodeIgniter

从网站:

的DataMapper是一个对象关系映射用PHP编写笨。它旨在将您的数据库表映射为易于与对象一起工作,充分了解彼此之间的关系。

+1

不太确定为什么这个答案是反对票。看似一个完全合理的建议。如果你想建立模型之间的关系,ORM就是你正在寻找的东西。 –