先看一个完整的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一样的效果,但结构更合理