Codeigniter3中CI_GridView类未找到错误求助
问题:CodeIgniter 3自定义GridView库调用报错
Class 'CI_GridView' not found 我正在使用CodeIgniter 3,已将自定义GridView类文件放置在Library目录,其代码如下:
<?php (defined('BASEPATH')) OR exit('No direct script access allowed'); class GridView{ private $data; private $headers; private $is_sortable; private $sort_columns; private $current_sort; private $show_checkbox; private $per_page; private $total_items; private $current_page; private $column_count; private $pagination_dots_threshold; private $search_url; private $deleteOption; private $formAction; private $formID; function __construct(){} public function init($config=array()){ $default=array( "id"=>"companies", "css_table_classes"=>"table table-bordered table-striped table-hover", "data"=>array(), "headers"=>array(), "is_sortable"=>true, "sort_columns"=>array(), "current_sort"=>"", "show_checkbox"=>true, "per_page"=>20, "total_items"=>42, "current_page"=>1, "pagination_dots_threshold"=>20, "search_url"=>false, "deleteOption"=>true, "formAction"=>"", "formID"=>"" ); $final= $config + $default; foreach($final as $k=>$v){ $this->{$k}=$v; } $positive = $negative = $this->negative_sort_columns=array(); if(is_array($this->sort_columns) && count($this->sort_columns) > 0){ foreach ($this->sort_columns as $col) { if(stripos($col,'!')!==false){ $negative[]=str_replace("!","",$col); }else{ $positive[]=$col; } } $this->sort_columns=$positive; $this->negative_sort_columns=$negative; } } }
我在控制器中通过以下代码调用该类:
$grid=load_class("GridView", $directory = 'libraries', $prefix = '');
但出现错误提示:
Class 'CI_GridView' not found in C:\xampp\htdocs\mgt\Master_Panel\system\core\Common.php on line 195
解决方案
这个问题是因为你用错了CodeIgniter的库加载方式,load_class()是框架内部用来加载核心系统类的方法,它默认会自动给类名加上CI_前缀,所以才会找不到你的GridView类。下面是两种解决办法:
方法一:用框架推荐的方式加载自定义库(首选)
CodeIgniter专门提供了$this->load->library()方法来加载自定义库,这是最符合框架规范的做法:
- 确保你的库文件名和类名一致:文件名为
GridView.php(首字母大写),放在application/libraries目录下。 - 在控制器里这样调用:
// 加载GridView库 $this->load->library('GridView'); // 准备配置参数(根据你的需求调整) $grid_config = array( 'total_items' => 100, 'current_page' => $this->input->get('page', TRUE) ?: 1, // 其他你需要的配置项 ); // 初始化GridView $this->gridview->init($grid_config);
方法二:修改类名适配load_class()(不推荐)
如果你一定要用load_class(),需要调整你的类名和调用方式:
- 把类名改成
CI_GridView,文件名也改成CI_GridView.php:class CI_GridView { // 原有的类代码不变 } - 然后在控制器里调用:
不过这种方式并不建议,因为$grid = load_class("GridView", 'libraries'); // 或者保留原类名,调用时明确指定前缀为空: // $grid = load_class("GridView", 'libraries', '');load_class()是为系统核心类设计的,自定义库用官方推荐的加载方式更稳妥。
额外检查项
- 确认
application/libraries目录的权限没问题,Web服务器能读取里面的文件; - 类文件要保存为UTF-8无BOM格式,避免出现解析错误;
- 如果你的GridView依赖其他类,记得提前加载那些依赖。
内容的提问来源于stack exchange,提问作者surma
相关产品推荐
相关产品推荐

