CodeIgniter 3控制器无法传数据到视图,是否需放在index方法?
问题1:控制器处理逻辑是否必须放在index()方法中?
不需要,CodeIgniter 3支持自定义控制器方法,只要你按照路由规则访问对应的方法即可,index()只是控制器的默认访问方法,没有强制要求业务逻辑必须写在里面。
$donors变量未定义的问题排查方案
- 首先确认访问路径是否正确
CI3的默认路由规则为[你的站点域名]/[控制器类名小写]/[方法名小写],你当前的控制器是Staff,业务逻辑写在viewDonors方法中,需要访问的地址应为xxx.com/staff/viewdonors,如果你直接访问xxx.com/staff会默认走index()方法,若index()方法没有加载viewdonors视图并传递$donors参数,就会出现变量未定义的报错。 - 修正模型加载的写法大小写问题
CI的model加载方法首字母为小写,你当前代码里写的$this->load->Model('Donor_Model')中大写M在Linux环境下会触发模型加载失败的问题,建议修改为:$this->load->model('Donor_Model'); - 建议模型返回格式化的查询结果
你当前模型直接返回query对象,虽然不是变量未定义的直接原因,但会导致后续视图遍历数据出错,建议修改模型方法,返回数组或对象格式的结果:function viewDonors() { $query = $this->db->get('donors'); // 返回对象数组用result(),返回二维数组用result_array() return $query->result_array(); } - 排查是否存在重复加载视图的逻辑
确认你的代码中没有其他位置加载了viewdonors视图但未传递$data参数,比如公共模板、其他方法中加载该视图的场景。
内容的提问来源于stack exchange,提问作者Pasindu Ruwandeniya
相关产品推荐
相关产品推荐

