CodeIgniter 3.0中Flexigrid加载数据库数据报错求助
解决Flexigrid构造函数过时错误及数据加载问题
首先,那个构造函数过时的错误是PHP版本兼容导致的,咱们先搞定它,再一步步修复数据加载的问题。
一、处理构造函数过时警告/错误
PHP 7.0之后就不再支持「和类名同名的方法作为构造函数」了,你用的Flexigrid库还在沿用旧写法。修改起来很简单:
- 找到项目里的
application/libraries/Flexigrid.php文件 - 找到里面的旧构造函数:
function Flexigrid() { // 原来的构造函数代码 }
- 把它改成PHP标准的构造函数写法:
public function __construct() { // 原来的代码保留不动 }
改完之后这个过时提示就会消失了。
二、修复代码里的其他问题(让数据正常加载)
1. 模型方法的参数和CI实例问题
你的模型GetData方法定义了$username, $password两个参数,但控制器调用的时候根本没传,这肯定会报错。如果这俩参数没用,直接删掉:
public function GetData(){ // 原代码内容 }
另外,模型里用$this->CI->flexigrid之前,得先初始化CI实例,在模型的构造函数里加这段:
private $CI; public function __construct() { parent::__construct(); $this->CI =& get_instance(); }
不然会找不到flexigrid对象。
2. 列数不匹配导致的渲染异常
你在lists里定义的colModel有6列,但load_data里的record_items却塞了7个元素,Flexigrid对列数要求严格,必须一一对应。
要么调整colModel的列数,要么修改record_items的元素数量。比如把colModel改成和record_items对应的7列:
$colModel['id_pengguna'] = array('ID',60,TRUE,'left',2); $colModel['nama_pengguna'] = array('NAMA PENGGUNA',100,TRUE,'left',2); $colModel['nik'] = array('NIK',100,TRUE,'left',2); $colModel['nama'] = array('NAMA',150,TRUE,'left',2); $colModel['no_telepon'] = array('NO TELEPON',150,TRUE,'left',2); $colModel['role'] = array('ROLE',150,TRUE,'left',2); $colModel['aksi'] = array('AKSI',60,FALSE,'center',2);
3. 确保JSON响应头配置正确
检查项目的config.php里有没有json_header配置,如果没有就加上:
$config['json_header'] = 'Content-Type: application/json';
不然返回的JSON数据格式不对,Flexigrid解析不了。
三、最后测试
按上面的步骤改完之后,清一下浏览器缓存,重新访问页面,应该就能正常加载数据到Flexigrid里了。
内容的提问来源于stack exchange,提问作者Yohanes Erwin
相关产品推荐
相关产品推荐

