2012-06-20 68 views
0

这是我在codeigniter MVC中的问题。codeigniter mvc,模型分离

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

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

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

通常我打电话给那些控制器,我的意思是第一次通话付款模式,并得到结果,并从用户模型获取用户信息,然后使用电子邮件模型,全部在控制器中。

但是因为我需要在某些控制器中运行该模型的方法,所以我必须重复这些方法,这不是我认为正确的方面。我应该在模型内部调用其他模型还是在模型中使用其他模型表(在这个选项中,如果我想重新使用这个模型,我应该改变它,如果其他表更改,这是不正确的),或者是否存在任何其他方式?

主要问题不完全在于它仅仅是情况的例子。 我还定义了一些功能,它可以完成那些控制器的功能,但它也不对。

+0

如果所有方法是在同一个模式,我没有问题。但它也不对。 – masphp

+0

我使用CI 3个月,我遇到了一些限制,所以你认为如果我使用zend框架,它会有所帮助,在这种情况下和其他限制,即:定义多层控制器 – masphp

回答

1

把它放到一个库中。

因此,您的控制器调用图书馆的“付款”,并传递一些细节。然后,您的图书馆做所有的你在上面描述的特征 - 即调用支付模式,发送电子邮件等等等等

You can learn more about codeigniter libraries here

+0

谢谢,它是一个选项,可以你告诉我在这种情况下函数和库之间有什么不同,如果我可以在这个方法中使用函数,毕竟我想把所有的逻辑放在这种情况下的类中。 – masphp

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/

+0

这是一些解决方案,但它不是我正在寻找的确切点。 – masphp