CodeIgniter4中Controller向View传值失败,请求技术帮助
CodeIgniter 4 控制器传值到视图失败的问题排查
你遇到的问题主要有三个核心错误,逐个修正即可解决:
1. 控制器传值格式错误
CodeIgniter 4 的视图接收的是关联数组,数组的键就是视图中可直接访问的变量名。你当前直接把索引数组传给view()方法,视图无法识别$data变量,且索引数组的数字键也无法在视图中正常调用。
修正后的控制器代码:
class Home extends BaseController { public function index() { $ProductModel = new Products(); // 将查询结果包装成关联数组,键为视图中要用的变量名 $data = [ 'productInfo' => $ProductModel->getBasicInfo(1) ]; return view('testing_view', $data); } }
2. 模型SQL查询的变量解析与安全问题
你用单引号包裹SQL语句,PHP不会解析单引号内的$id变量,导致SQL执行时会把$id当成字符串条件,无法查到目标数据,还存在SQL注入风险。同时未处理查询无结果的情况,会引发空指针错误。
修正后的模型代码:
getBasicInfo(int $id): array { $db = $this->connectToDB(); // 使用预处理语句,安全解析变量并防止注入 $query = $db->query('SELECT productName, productDescription, productType FROM konnektrix_db.products WHERE productID = ? LIMIT 1', [$id]); $row = $query->getRow(); // 处理无查询结果的情况,避免报错 if (!$row) { return []; } // 返回关联数组,方便视图调用 return [ 'name' => $row->productName, 'description' => $row->productDescription, 'type' => $row->productType ]; }
3. 视图变量访问错误
当前视图中<? $data; ?>既没有输出内容,也无法识别变量。需要使用PHP输出标签,并且调用控制器传入的关联数组键名。
修正后的视图代码:
<!DOCTYPE html> <html lang="en"> <head> <title>Data testing view</title> </head> <body> <h2>General product overview page</h2> <?php if (!empty($productInfo)): ?> <h1><?= $productInfo['name'] ?></h1> <p><?= $productInfo['description'] ?></p> <p>Type: <?= $productInfo['type'] ?></p> <?php else: ?> <p>No product found</p> <?php endif; ?> </body>
内容的提问来源于stack exchange,提问作者dsYuna
相关产品推荐
相关产品推荐

