Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在视图加载时调用Codeigniter控制器函数_Php_Codeigniter - Fatal编程技术网

Php 在视图加载时调用Codeigniter控制器函数

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

任务

在每次新页面加载时从数据库中获取用户的平衡。无法在会话中存储,因为有一个奖金系统可以在用户登录时增加其余额

按照我的页面设置方式,它有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);
然而,这意味着每次调用页面时,我都必须从某个地方的控制器调用数据库

我想知道的是,每次调用
导航栏视图时,它都会自动调用一个返回用户平衡的控制器函数

我想象这样的情况:

$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);