codeigniter mvc,模型分离

时间:2012-06-20 11:17:43

标签: model-view-controller codeigniter model

这是我在codeigniter MVC中的问题。

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

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

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

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

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

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

主要问题不仅仅是它只是情况的一个例子。 我还定义了一些功能来完成这些操作并从控制器调用,但它也不对。

2 个答案:

答案 0 :(得分:1)

将所有内容放入库中。

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

You can learn more about codeigniter libraries here

答案 1 :(得分:1)

这是一个很好的解决方案。在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/