先看一个完整的MVC案例:
<?php
//连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=php','root','root');
//创建预处理语句
$stmt = $pdo->prepare("SELECT staff_id,name,age,salary FROM staff LIMIT :num;");
//执行查询
$stmt -> bindValue(':num',10,PDO::PARAM_INT);
$stmt -> execute();
//解析结果集
$result = $stmt -> fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>MVC模式简介</title>
<style type="text/css">
table,th,td {
border:1px solid black;
}
table {
border-collapse: collapse;
width: 60%;
margin: 30px auto;
text-align: center;
}
table tr:first-child {
background-color: lightgreen;
}
table caption {
font-size:1.5em;
margin-bottom: 15px;
}
</style>
</head>
<body>
<table>
<caption>员工信息表</caption>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>工资</th>
</tr>
<?php foreach ($result as $staff) : ?>
<tr>
<td><?php echo $staff['staff_id'] ?></td>
<td><?php echo $staff['name'] ?></td>
<td><?php echo $staff['age'] ?></td>
<td><?php echo $staff['salary'] ?></td>
</tr>
<?php endforeach; ?>
</table>
</body>
</html>点击 "运行实例" 按钮查看在线实例
下面我们把以上案例进行拆分出 M V C三部分
M:Model模型层,用来实现也数据库相关的操作
<?php
namespace mvc\model;
class Model
{
public $pdo = null;
public $result = [];
//构造方法
public function __construct($dbname, $user, $pass)
{
//连接数据库
$this->pdo = new \PDO('mysql:host=localhost;dbname='.$dbname,$user,$pass);
}
//执行查询并获取结果集
public function select($table, $num)
{
//创建预处理语句:将复制过来的 $pdo 替换成 $this->pdo
$stmt = $this->pdo->prepare("SELECT staff_id,name,age,salary FROM {$table} LIMIT :num;");
//执行查询
$stmt -> bindValue(':num',$num,\PDO::PARAM_INT);
$stmt -> execute();
//解析结果集:将复制过来的 $result 替换成成 $this->result
$this->result = $stmt -> fetchAll(\PDO::FETCH_ASSOC);
}
}V:View视图层,用来实现用户界面与数据展示
<?php
namespace mvc\view;
class View
{
public $data = [];
public function __construct($data)
{
$this->data = $data;
}
public function getData()
{
return $this->data;
}
public function display($data)
{
$table = '
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC模式简介</title>
<style type="text/css">
table,th,td {
border:1px solid black;
}
table {
border-collapse: collapse;
width: 60%;
margin: 30px auto;
text-align: center;
}
table tr:first-child {
background-color: lightgreen;
}
table caption {
font-size:1.5em;
margin-bottom: 15px;
}
</style>
</head>
<body>
<table>
<caption>员工信息表</caption>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>工资</th>
</tr>';
foreach ($data as $staff) {
$table .= '<tr>';
$table .= '<td>'.$staff['staff_id'].'</td>';
$table .= '<td>'.$staff['name'].'</td>';
$table .= '<td>'.$staff['age'].'</td>';
$table .= '<td>'.$staff['salary'].'</td>';
}
$table .= '</table>
</body>
</html>';
echo $table;
}
}C:Controller 控制器层,根据视图层的要求选择合适的模型
<?php
namespace mvc\controller;
class Controller
{
public function index()
{
require './model/Model.php';
$model = new \mvc\model\Model('php','root','root');
$model -> select('staff',10);
$result = $model -> result;
require './view/View.php';
$view = new \mvc\view\View($result);
$data = $view->getData();
$view->display($data);
}
}下面是模型和控制器测试文件 test.php
<?php
require './model/Model.php';
use mvc\model\Model;
$model = new Model('php','root','root');
$model -> select('staff',10);
$result = $model -> result;
// print_r($result);
require './view/View.php';
use mvc\view\View;
$view = new View($result);
$data = $view->getData();
$view->display($data);
//这些操作应该放在控制器最后是测试文件 index.php
<?php //导入控制器类 require 'controller/Controller.php'; use mvc\controller\Controller; $controller = new Controller; $controller->index();
MVC的知识点:
MVC是最经典,也是最流行的Web项目设计思想
M:Model模型层,用来实现也数据库相关的操作
V:View视图层,用来实现用户界面与数据展示
C:Controller 控制器层,根据视图层的要求选择合适的模型
第一步. 创建temp.php文件
1. 完成模板创建
2. 数据库连接与查询(pdo实现)
第二步. MVC目录架构
1. 创建model 模型层目录
.创建Model类
.创建构造器完成数据库连接
.select()方法完成结果集查询
2. 创建test.php测试脚本
.完成模型类的测试,确保能正常工作
3. 创建view 视图层目录
.创建View类
.类中声明三个方法
.构造器方法:实现模板赋值
.getData方法: 格式化数据
.display(): 渲染模板
4. 再次打开test.php测试脚本
.对刚才创建的视图类进行测试
5. 创建controller 控制器目录
.仅创建一个index方法
.将test.php内容复制进去即可
6. 创建项目入口文件
.入口文件一般是:index.php
.在mvc目录下创建index.php
.入口文件只做一件事:实例化控制器并调用index方法
7. 最终将项目跑起来,实现与temp.php一样的效果,但结构更合理
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号