当用户登录我的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.
>将新助手添加到autoload.
>只需在您需要的地方拨打您的电话.
我这样做的原因是因为如果你需要它在许多不同的控制器上,那么将它放在一个容易接近的地方是非常方便的.当您需要维护代码时,它也会变得更容易.例如,如果要添加缓存,则只需将该代码添加到该单个函数中,而不必在每个控制器中进行更改.
事实上,在您的具体情况下,我实际上是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;
}
}
}
这样,由于您可能将此信息存储在会话中,因此将这些信息保存在一起非常有意义.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。