You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter在header视图引入model后非dashboard页面报错如何解决

问题原因

该报错本质是dashboard_model没有被全局加载,只有访问dashboard页面对应的控制器时,你提前在该控制器中加载了该模型,因此视图可以通过$this访问到模型实例;其他页面的控制器未加载dashboard_model,视图尝试调用未初始化的模型属性就会抛出错误。
另外在视图中直接调用模型查询数据不符合CodeIgniter的MVC设计规范,视图层仅应负责数据渲染,业务逻辑和数据查询应当放在控制器/模型层处理。

解决办法

可以根据你的业务场景选择以下任意一种方案:

  • 方案1:全局自动加载模型(适合全站所有页面都需要用到该统计的场景)
    打开application/config/autoload.php,找到模型自动加载配置项,添加dashboard_model即可:

    $autoload['model'] = array('dashboard_model');
    

    配置后框架会在每次请求时自动初始化该模型,所有页面的视图都可以直接调用。

  • 方案2:自定义核心控制器统一处理公共数据(最推荐,符合MVC规范)

    1. 在application/core目录下新建MY_Controller.php,继承默认的CI_Controller,在构造函数中统一加载模型、获取公共数据并全局传递到视图:
    <?php
    class MY_Controller extends CI_Controller {
        public function __construct() {
            parent::__construct();
            // 加载公共模型
            $this->load->model('dashboard_model');
            // 获取统计数据
            $data['lead_count'] = $this->dashboard_model->combined();
            // 全局传递数据,所有加载的视图都可以直接拿到该变量
            $this->load->vars($data);
        }
    }
    
    1. 所有业务控制器(包括dashboard、其他页面的控制器)都改为继承MY_Controller而非默认的CI_Controller,示例:
    class Dashboard extends MY_Controller {
        // 原有业务逻辑不变
    }
    
    1. 删除header视图中调用模型的代码,直接输出控制器传递的变量即可:
    <li><a href="leads/">Active Leads (<?php echo $lead_count[0]["active"] ?>)</a></li>
    
  • 方案3:公共模板加载方法统一传参
    如果你是在统一的方法中加载全站公共模板(header+主体+footer),可以在该方法中提前加载模型、获取统计数据,加载header视图时直接传入参数即可,不需要改动其他业务逻辑。

内容的提问来源于stack exchange,提问作者H2O

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:54:06