一个控制器中的多个模型,codeigniter中的编码实践

时间:2014-04-18 13:30:34

标签: php codeigniter authentication

我正在建立一个网站,我之前没有做过MVC,但我觉得我理解它(希望如此)。

我有网站不同方面的控制器,模型和视图,例如register有自己的控制器,模型和视图。

网站主页上有一个登录面板,主页上有帐户管理面板。

因此,通过索引控制器,我已经通过这个控制器加载了登录模型和accountManagement模型。

我不知道有任何其他方法 - 没有重复功能 - 因为这些都显示在主页上,具体取决于用户是否有各种cookie。

我想知道编码练习(在一个控制器中加载多个模型),以及可能的建议,如果这是一个不好的做法。

“如何在一个控制器中加载两个模型”现有线程,等等,但是,我的问题是关于编码实践,我找不到问题。

3 个答案:

答案 0 :(得分:1)

在控制器中加载多个模型没有问题。如果您需要控制器中所有方法中的模型,则在每个学习帖子的构造函数中加载它。如果在一种方法中只需要模型,则可以在方法中加载它。

在控制器中构建代码时 - 将其重构为模型。这使得控制器中的代码成为抽象的。换句话说,更少"具体"代码在控制器中需要更改的程度越少。

如果您正在进行登录,然后检查每个页面上的登录状态 - 最简单的方法是将该检查放在构造函数中,这样您就可以了解控制器中的所有方法。另一个建议是始终从登录检查中返回一些内容。您可以返回一个具有用户名,电子邮件等的对象或数组。然后,不要检查控制器上的登录状态 - 您正在检查登录检查方法是否返回了任何内容。这使得它在添加功能时更加灵活。

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

    $this->load->model( 'logingate' );
    $this->load->model( 'accountManagement' );

    if ( ! $this->admin = $this->logingate->returnAdmin() ) {
        redirect( '/login/', 'refresh' );       }

} // 

然后 $ this-> admin 可立即用于控制器中的任何方法,称为模型和任何被调用的视图。

echo 'Hello ' . $this->admin->name ; 

答案 1 :(得分:0)

我相信这就是您所寻找的 TankAuth 。 Tank Auth是PHP框架CodeIgniter的身份验证库。它基于DX Auth,虽然代码经过严格修改。

使用CodeIgniter进行配置非常简单,其代码格式正确。

你可以在这里学到很多东西。

答案 2 :(得分:0)

将模型加载到控制器中时,您可以执行以下操作:

function __construct(){
    parent::__construct();
    $this->load->model('user_model');
    $this->load->model('post_model');
}

function index(){

    $user_id = $this->session->userdata('id');

    $data['user_details'] = $this->user_model->get_user($user_id);
    $data['posts'] = $this->post_model->get_latest_posts();

    $this->load->view('homepage_view', $data);

}

希望这就是你要找的东西。如果它不是评论,我会尝试帮助。