我试图将数据从“user_app”表检索到视图页面中的表格形式中。
下面是我的Controller(方法):
public function getUserApps($email) {
$userAppsModel = new UserApps($this->pdo);
$apps = $userAppsModel->get($email);
return $this->view('user/dashboard', ['apps' => $apps]);
}
下面是我用来获取数据的方法:
public function get($email) {
$sql = "SELECT * FROM $this->table WHERE email = :email";
$stmt = $this->pdo->prepare($sql);
$stmt->bindParam(':email', $email, PDO::PARAM_STR);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
return $user;
}
这是我的视图页面(dashboard.php)第107行:
<h1>User List</h1>
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
<th>Role</th>
</tr>
**Line 107:** <?php foreach ((array) $apps as $app) : ?>
<tr>
<td><?= $app['app_name'] ?></td>
<td><?= $app['app_desc'] ?></td>
<td><?= $app['app_cat'] ?></td>
</tr>
<?php endforeach; ?>
</table>
我的view()方法:
protected function view($filename, $data = []) {
if (file_exists('../view/' . $filename . '.php')) {
require_once '../view/' . $filename . '.php';
}
}
获取错误:警告:C:\xampp\htdocs\xxxxxx\view\user\dashboard中未定义的变量$apps。php在线107
1条答案
按热度按时间uqjltbpv1#
您的
view()
方法没有extract()
执行$data
参数,因此$data['apps']
对您的视图不可用。在
require
转换视图文件之前,您需要使用extract($data)
。注意:
extract()
是一个危险的方法,不应该用于不可信的数据(例如来自$_GET
或$_POST
),因为extract
使数组键作为变量可用。解决方案:
下面是使用extract重写的
view()
方法:但是,使用
require_once
可能会给您带来问题。如果一个视图要在同一个请求上显示两次,那么只有第一次调用view()
才能做任何事情。将require_once
替换为require
**无关建议:**我个人喜欢提前返回,而不是在if块中嵌套有意义的代码。我也喜欢明确的路径和类型。你可以忽略这个建议,但我个人会这样写方法: