CodeIgniter中URL传递ID报错:Trying to get property of non-object
解决CodeIgniter中URL传递ID时的"Trying to get property of non-object"错误
咱们先拆解下这个错误的根源:你在视图里尝试访问$f->id,但$f根本不是对象——它只是一个字符串!
看你的模型代码,get_field()方法返回的是数据库表camera_details的字段名数组(比如['id', 'model', 'price']这种),但你想要的明明是表中的具体记录数据,这样才能拿到每条记录的id来做编辑/删除操作呀。
接下来给你一步步修正的方案:
1. 重写模型方法:获取表的所有记录
把模型里的get_field()改成获取所有相机数据的方法,比如命名为get_all_cameras():
function get_all_cameras(){ // 查询camera_details表的所有记录 $query = $this->db->get('camera_details'); // 返回对象数组(如果偏好数组格式可以用result_array()) return $query->result(); }
2. 更新控制器:调用新的模型方法
修改控制器的cameralist()方法,让它获取记录数据并传给视图:
function cameralist(){ $this->load->model('p_model'); // 获取所有相机记录,赋值给data['cameras'] $data['cameras'] = $this->p_model->get_all_cameras(); $this->load->view('cameralist',$data); }
3. 修正视图:遍历记录对象并展示内容
现在视图里拿到的是包含每条相机记录的对象数组,你可以遍历这些对象,展示字段内容并生成正确的编辑/删除链接:
<?php foreach($cameras as $camera): ?> <!-- 展示除id外的所有字段 --> <?php foreach(get_object_vars($camera) as $field_name => $field_value): ?> <?php if($field_name != 'id'): ?> <div class="values"><?= $field_name . ": " . $field_value ?><br></div> <?php endif; ?> <?php endforeach; ?> <!-- 生成编辑和删除链接,这里用$camera->id拿到当前记录的ID --> <a href="<?= base_url('index.php/product/edit/' . $camera->id) ?>">Edit</a> <a href="<?= base_url('index.php/product/delete/' . $camera->id) ?>">Delete</a> <br><br><br> <?php endforeach; ?>
额外小提示:
- 如果你明确知道要展示哪些字段,直接写字段名会比遍历更清晰,比如
<?= $camera->model ?>、<?= $camera->price ?> - 确保你的
camera_details表确实存在id字段,不然还是会出现类似错误 - CodeIgniter中
base_url()支持直接拼接路径,写法更简洁,比如base_url('product/edit/' . $camera->id)(前提是你在config里正确配置了base_url)
内容的提问来源于stack exchange,提问作者user9232865




