博客列表 >简单MVC示例演示

简单MVC示例演示

晨
原创
2022年05月07日 15:06:54660浏览

创建配置文件 config.php

  • 配置文件应该是第一个被加载的文件

    config.php代码

  1. <?php
  2. //数据库连接文件
  3. define('DATABASE', [
  4. 'type' => 'mysql',
  5. 'host' => 'localhost',
  6. 'dbname' => 'phpedu',
  7. 'port' => '3306',
  8. 'charset' => 'utf8',
  9. 'username' => 'root',
  10. 'password' => 'root'
  11. ]);
  12. //应用相关
  13. define('APP', [
  14. //默认控制器
  15. 'default_controller' => 'index',
  16. //默认方法
  17. 'default_action' => 'index'
  18. ]);
  19. //项目根路径
  20. define('ROOT_PATH', __DIR__);
  21. ?>
  • 只提供数据库连接,应用中的控制器设置等基本功能
  • 其它功能,可自行添加

    创建核心类库MVC

  • 创建框架核心类库 core 目录,将 mvc 类放进去,方便统一管理和更新

    控制器类文件Controller.php代码

  1. <?php
  2. namespace phpedu;
  3. class Controller
  4. {
  5. // 模型对象
  6. protected $model;
  7. // 视图对象
  8. protected $view;
  9. // 控制器类实例时,要确保模型和视图对象可用
  10. public function __construct($model,$view)
  11. {
  12. $this->model = $model;
  13. $this->view = $view;
  14. }
  15. public function index()
  16. {
  17. // 1. 模型: 获取数据
  18. $data = $this->model->getAll(10);
  19. // 2. 视图: 渲染模板
  20. $this->view->display($data);
  21. }
  22. }
  23. ?>

模型类文件Model.php代码

  1. <?php
  2. namespace phpedu;
  3. use PDO;
  4. class Model
  5. {
  6. // 数据对象
  7. protected $db;
  8. // 模型实例化时,应该将数据库连接上,为后面的操作做好准备
  9. public function __construct($dsn,$username,$password)
  10. {
  11. $this->db = new PDO($dsn,$username,$password);
  12. }
  13. // 通常模型类中,会预置一些公共方法,供用户进行数据库操作
  14. public function getAll($n = 10)
  15. {
  16. $stmt = $this->db->prepare('SELECT * FROM `staff` LIMIT ?');
  17. $stmt->bindParam(1, $n, PDO::PARAM_INT);
  18. $stmt->execute();
  19. return $stmt->fetchAll();
  20. }
  21. }
  22. ?>

渲染视图类文件View.php代码

  1. <?php
  2. namespace phpedu;
  3. class View
  4. {
  5. public function display($data)
  6. {
  7. // 1. 模型赋值
  8. $staffs = $data;
  9. // 2. 渲染模型
  10. include ROOT_PATH . '/view/' .'show.php';
  11. }
  12. }
  13. ?>

自定义默认控制器类模型

  • 自定义控制器和模型和视图类,继承自核心类库中的对应类
  • IndexController.php 代码
  1. <?php
  2. namespace phpedu;
  3. // 默认控制器
  4. class IndexController extends Controller
  5. {
  6. }
  7. ?>
  • 自定义模型 StaffModel.php 代码
  1. <?php
  2. namespace phpedu;
  3. // 用户自定义模型
  4. class StaffModel extends Model
  5. {
  6. }
  7. ?>

MVC目录结构

mvc目录结构

视图模板文件show.php 代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>员工信息浏览</title>
  8. <style type="text/css">
  9. table
  10. {
  11. border-collapse: collapse;
  12. margin: 0 auto;
  13. text-align: center;
  14. width: 550px;
  15. }
  16. table caption
  17. {
  18. line-height:2.5em;
  19. letter-spacing:0.4em;
  20. font-size: 1.3em;
  21. text-decoration:underline;
  22. text-decoration-color:navy;
  23. }
  24. table td, table th
  25. {
  26. border: 1px solid #cad9ea;
  27. color: #666;
  28. height: 30px;
  29. }
  30. table thead th
  31. {
  32. background-color: slateblue;
  33. letter-spacing:0.2em;
  34. width: 100px;
  35. color:seashell;
  36. }
  37. table tbody tr:nth-child(odd)
  38. {
  39. background: beige;
  40. }
  41. table tbody tr:nth-child(even)
  42. {
  43. background: azure;
  44. }
  45. table tbody tr:hover {
  46. background-color: lightskyblue;
  47. }
  48. </style>
  49. </head>
  50. <body>
  51. <table >
  52. <caption >员工信息表</caption>
  53. <thead>
  54. <tr>
  55. <th>id</th>
  56. <th>姓名</th>
  57. <th>性别</th>
  58. <th>邮箱</th>
  59. <th>操作</th>
  60. </tr>
  61. </thead>
  62. <tbody>
  63. <?php foreach ($staffs as [$id, $name, $sex, $email]) : ?>
  64. <tr>
  65. <td><?= $id ?></td>
  66. <td><?= $name ?></td>
  67. <td><?= $sex ? '女' : '男' ?></td>
  68. <td><?= $email ?></td>
  69. <td>
  70. <a href="">修改</a>
  71. <a href="">删除</a>
  72. </td>
  73. </tr>
  74. <?php endforeach ?>
  75. </tbody>
  76. </table>
  77. </body>
  78. </html>

入口文件index.php 代码

  1. <?php
  2. namespace phpedu;
  3. // 加载配置项
  4. require __DIR__ . '/config.php';
  5. // 加载框架的核心类型
  6. require __DIR__ . '/core/Controller.php';
  7. require __DIR__ . '/core/Model.php';
  8. require __DIR__ . '/core/View.php';
  9. // 加载自定义模型
  10. require __DIR__ . '/model/StaffModel.php';
  11. // 将关联数组解构成一一个独立变量
  12. extract(DATABASE);
  13. $dsn = sprintf('%s:dbname=%s', $type, $dbname);
  14. $model = new StaffModel($dsn, $username, $password);
  15. // c=控制器, a=控制器的方法 ?c=controller&a=action
  16. $c = $GET['c'] ?? APP['default_controller'];
  17. $a = $GET['a'] ?? APP['default_action'];
  18. // 获取类名
  19. $class = ucfirst($c) . 'Controller';
  20. // 加载自定义控制器类
  21. require __DIR__ . '/controller/' . $class . '.php';
  22. // 加载视图类
  23. $view = new VIew();
  24. // 完整控制器类名
  25. $fullclass = __NAMESPACE__ . '\\' . $class;
  26. $controller = new $fullclass($model,$view);
  27. // 执行控制器中的index()方法
  28. echo $controller->$a();
  29. ?>

执行页面效果

页面效果

上一条:MVC课后练习下一条:CentOS安装jdk
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议