我正在建立一个网站,我之前没有做过MVC,但我觉得我理解它(希望如此)。
我有网站不同方面的控制器,模型和视图,例如register有自己的控制器,模型和视图。
网站主页上有一个登录面板,主页上有帐户管理面板。
因此,通过索引控制器,我已经通过这个控制器加载了登录模型和accountManagement模型。
我不知道有任何其他方法 - 没有重复功能 - 因为这些都显示在主页上,具体取决于用户是否有各种cookie。
我想知道编码练习(在一个控制器中加载多个模型),以及可能的建议,如果这是一个不好的做法。
“如何在一个控制器中加载两个模型”现有线程,等等,但是,我的问题是关于编码实践,我找不到问题。
答案 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);
}
希望这就是你要找的东西。如果它不是评论,我会尝试帮助。