【问题标题】:codeigniter mvc , model separationcodeigniter mvc,模型分离
【发布时间】:2012-06-20 11:17:43
【问题描述】:

这是我在 codeigniter MVC 中的问题。

假设我有 3 个模型:(用户、电子邮件、付款)。 当有人通过某种方式付款时,控制器调用了某个支付​​模型的方法,该方法也可以从其他控制器调用。

那个方法,做一些数据库插入和更新,最后,它想给用户发送一封电子邮件,它已经有了用户ID,但它需要用户名,电子邮件,这应该从用户表中获取,然后发送电子邮件。

我不喜欢付款模型可以访问用户表,我想从用户模型获取信息并使用电子邮件模型发送电子邮件。

通常我从控制器调用那些,我的意思是首先调用支付模型并获取结果并从用户模型获取用户信息然后使用电子邮件模型,所有这些都在控制器中。

但是因为我需要在一些控制器中运行该模型的方法,所以我必须重复这些行,这不是我的观点正确的方面。

问题: 我应该在模型中调用其他模型还是在模型中使用其他模型表(在此选项中,如果我想重用该模型,如果其他表更改不正确,我应该更改它),还是有其他方法?

主要问题不完全是那一个,它只是一个例子。 我还定义了一些函数来做这些事情并从控制器调用,但这也不对。

【问题讨论】:

  • 如果所有方法都在同一个模型上,我没有问题。但也不对。
  • 我使用 CI 3 个月了,我遇到了一些限制,所以你认为如果我使用 zend 框架,它会有所帮助吗?在这种情况下和其他限制,即:定义多层控制器跨度>

标签: model-view-controller codeigniter model


【解决方案1】:

将它们全部放入库中。

因此,您的控制器调用库进行“付款”,并传递一些详细信息。然后,您的库会执行您上面描述的所有功能 - 即调用支付模型、发送电子邮件等。

You can learn more about codeigniter libraries here

【讨论】:

  • 谢谢,这是一个选项,你能告诉我在这种情况下函数和库有什么不同吗?如果我可以在这种方法中使用函数,毕竟我想把所有逻辑放在一个在这种情况下为模型类。
【解决方案2】:

这是一个很好的解决方案。在 application/core 中定义 My_model.php。

Class My_model extends CI_Model{

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

    function get($where , $table){
        $query = $this->db->get_where($table, $where);
        return $query->result();
    }
}

现在您的模型应该扩展 My_model 而不是 CI_Model。 现在你可以这样称呼它。假设在您的控制器中您已经加载了电子邮件模型并且您想要访问用户模型。

 $where = array('user_id', $id); 
 $table = 'user';
 $this->email->get($table, $where);

欲了解更多信息,请阅读本书
http://codeigniter.com/forums/viewthread/211821/

【讨论】:

  • 这是一些解决方案,但不是我要寻找的确切点。
猜你喜欢
  • 2012-01-29
  • 2010-12-09
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2011-04-30
  • 2012-10-21
相关资源
最近更新 更多