任务
在每次新页面加载时从数据库中获取用户的余额。无法存储在会话中,因为有一个奖励系统可以在用户登录时添加到用户的余额中。
在我的页面设置方式中,它有4个部分:
$this->load->view('head'); //Head, meta, css, js
$this->load->view('navbar'); //Strip 50px height at top of page. Has navigation, logout and user balance
$this->load->view('xxx'); //Unique page content
$this->load->view('footer'); //standard footer
我可以通过附加参数将信息传递给视图:
$this->load->view('navbar', $balance);
然而,这意味着每次调用页面时,我都必须从控制器某处调用数据库。
我正在寻找的是每次调用navbar view
时如何实现这一点的想法,它会自动调用一个返回用户余额的控制器函数。
我想象这样的事情:
$this->load->view('navbar', function getBalance() {
return callControllerAndGetBalance();
});
有一个肮脏的想法是在页面加载的AJAX
中调用navbar
调用控制器,然后更改值,但这似乎是错误的。
有什么想法吗?
答案 0 :(得分:2)
您可以使用CodeIgniter挂钩:
https://ellislab.com/codeigniter/user-guide/general/hooks.html
未经测试,但这是我认为它必须工作的方式。从我在评论中添加的quora链接中获取此信息,看起来就像是在调用$ controller =& get_instance();那么这就是控制器,您可以为它添加一个属性,它将在那里供您查看。
我也可以使用不同的选项,这可能很有希望取决于你在__construct方法中做了什么:
<强> post_controller_constructor 强> 在实例化控制器之后立即调用,但在任何方法调用发生之前调用。
class Blog extends CI_Controller{
public $balance = 0;
public function getBalance(){
$this->balance = Balance::getMe();
}
}
你可以做的是从钩子中调用get_instance帮助函数。
class PostControllerHook{
function post_controller($params) {
// $params[0] = 'controller' (given the params in the question)
// $controller is now your controller instance,
// the same instance that just handled the request
$controller =& get_instance();
$controller->getBalance();
}
}
然后使用
$this->load->view('navbar', $this->balance);