一个控制器中包含多个模型,代码点火器中的编码实践


Multiple models in one controller, coding practice in codeigniter

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

我有控制器,模型,以及网站不同方面的视图,就像register有自己的控制器,模型和视图一样。

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

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

我不知道还有什么其他方法可以做到这一点——不复制功能——因为这些都显示在主页上,这取决于用户是否有各种cookie。

当谈到这一点时,我想知道编码实践(在一个控制器中加载多个模型),以及如果这是一个糟糕的实践,可能的建议。

有一些关于"如何在一个控制器中加载两个模型"的现有线程,等等,然而,我的问题是关于这方面的编码实践,我找不到任何问题。

在控制器中加载多个模型没有问题。如果您在控制器中的所有方法中都需要该模型,那么根据learn的帖子将其加载到构造函数中。如果一个方法只需要模型,那么可以在该方法中加载它。

当您在控制器中构建代码时,将其重构到您的模型中。这使得控制器中的代码变得抽象。换句话说,控制器中的代码越不"具体",就越不需要更改。

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

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 ; 

我相信这就是您想要的TankAuth。Tank Auth是一个PHP框架CodeIgniter的身份验证库。它基于DX-Auth,尽管代码经过了认真的修改。

使用CodeIgniter配置它很简单,而且它的代码格式也很好。

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

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

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);
}

希望这就是你想要的。如果这不仅仅是评论,我会尽力帮助你。