Php 在视图加载时调用Codeigniter控制器函数
任务 在每次新页面加载时从数据库中获取用户的平衡。无法在会话中存储,因为有一个奖金系统可以在用户登录时增加其余额 按照我的页面设置方式,它有4个部分:Php 在视图加载时调用Codeigniter控制器函数,php,codeigniter,Php,Codeigniter,任务 在每次新页面加载时从数据库中获取用户的平衡。无法在会话中存储,因为有一个奖金系统可以在用户登录时增加其余额 按照我的页面设置方式,它有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-&g
$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);
然而,这意味着每次调用页面时,我都必须从某个地方的控制器调用数据库
我想知道的是,每次调用导航栏视图时,它都会自动调用一个返回用户平衡的控制器函数
我想象这样的情况:
$this->load->view('navbar', function getBalance() {
return callControllerAndGetBalance();
});
在navbar
中放入AJAX
调用,在页面加载时调用控制器,然后更改值,这是一个肮脏的想法,但这似乎是错误的
有什么想法吗?您可以使用CodeIgniter挂钩:
未经测试,但我认为它必须这样工作。从我在注释中添加的quora链接中可以看出,调用$controller=&get_instance()时;然后,这就是控制器,您可以向其添加属性,它将出现在您的视图中
我也会使用不同的选项,这可能是有希望的,这取决于您在_构造方法中所做的工作:
post\u controller\u constructor
在控制器实例化之后,但在任何方法调用发生之前立即调用
您可以做的是从钩子中调用get_instance helper函数
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);
我不敢问该用哪个钩子。我感觉post_控制器可能就是其中之一,但我真的想不出如何整合它。虽然我经常使用CodeIgniter,但实际上我还没有这样做。我猜事实上是一样的-post_控制器。原因是,你正在做一个相当简单的操作,它只是一个附加组件。这里有一个小例子:我不确定如何使用它。我不知道如何将数据传递到视图。这并不完全是它,因为每个控制器都必须以这种方式扩展,因为我有多个控制器。我决定使用Ajax并重新设置平衡。速度没有那么重要。谢谢大家,现在就开始讨论codeigniter 2和codeigniter 3的所有新用户指南
$this->load->view('navbar', $this->balance);