php – 从CodeIgniter中每个页面上所需的模型中检索数据的最佳方
发布时间:2020-12-13 22:33:34 所属栏目:PHP教程 来源:网络整理
导读:当用户登录我的CodeIgniter应用程序时,我需要一个他们必须在他们访问的每个页面上的菜单中的配置文件列表.而不是在我的应用程序中的每个方法上调用模型函数,如下所示: if ($this-users_model-is_logged_in()){ $data-profiles = $this-profiles_model-get_p
当用户登录我的CodeIgniter应用程序时,我需要一个他们必须在他们访问的每个页面上的菜单中的配置文件列表.而不是在我的应用程序中的每个方法上调用模型函数,如下所示:
if ($this->users_model->is_logged_in()) { $data->profiles = $this->profiles_model->get_profiles(); } $this->load->vars($data); 有一个更好的方法吗?我考虑过像这样扩展CI_Controller类的选项,但无法确定如何最好地将变量传递给需要信息的实际方法. class MY_Controller extends CI_Controller { public function __construct() { // Alternatively these could be auto-loaded $this->load->model(array('profiles_model','users_model')); if ($this->users_model->is_logged_in()) { $data->profiles = $this->profiles_model->get_profiles(); } } } 我关心的是最佳实践,最佳性能和最佳缓存能力(如果可能的话). 解决方法
如果我在所有页面上都有我需要的东西,我会执行以下操作.
>添加helper. 我这样做的原因是因为如果你需要它在许多不同的控制器上,那么将它放在一个容易接近的地方是非常方便的.当您需要维护代码时,它也会变得更容易.例如,如果要添加缓存,则只需将该代码添加到该单个函数中,而不必在每个控制器中进行更改. 事实上,在您的具体情况下,我实际上是created my own session class来扩展CI会话.作为一个非常基本的例子(我也使用sessions in database): class MY_Session extends CI_Session { public function __construct() { parent::__construct(); } public function login($email,$password) { $CI =& get_instance(); $CI->load->model('usermodel','user'); $result = $CI->user->login($email,$password); if($result === false) { return false; } else { $this->set_userdata('email',$result->email); return true; } } public function is_logged_in() { $email = $this->userdata('email'); if(!empty($email)) { return true; } else { return false; } } } 这样,由于您可能将此信息存储在会话中,因此将这些信息保存在一起非常有意义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |