博客列表 >MVC实例演示

MVC实例演示

上草一方
上草一方原创
2022年05月08日 09:52:32715浏览

创建配置文件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__);

创建核心类库

创建框架核心类库core,将Model.php、View.php、Controller.php一并放入core目录中,好方便管理

模型类文件代码如下:

  1. <?php
  2. namespace phpcn;
  3. use PDO;
  4. class Model
  5. {
  6. // 连接对象
  7. // * protected表示受保护的,只有本类或子类或父类中可以访问
  8. protected $db;
  9. // * 模型实例化时,应该将数据库连接上,为后面的操作做好准备
  10. public function __construct($dsn,$username,$password)
  11. {
  12. $this->db = new PDO($dsn,$username,$password);
  13. }
  14. // 通常模型类中,会预置一些公共方法,供用户进行数据库操作
  15. // 获取分布数据(多条)
  16. public function getAll($n = 10)
  17. {
  18. $stmt = $this->db->prepare('SELECT * FROM `staff` LIMIT ?');
  19. // 默认绑定的都是字符串类型
  20. // 1代表一个问号,$n代表要绑定的变量,PDO::PARAM_INT表示值为整型
  21. $stmt->bindParam(1,$n,PDO::PARAM_INT);
  22. $stmt->execute();
  23. // * 下面这条语句用来解析调试的
  24. // print_r($stmt->debugDumpParams());
  25. return $stmt->fetchAll();
  26. }
  27. }

视图类文件代码:

  1. <?php
  2. namespace phpcn;
  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. }

控制器类文件代码

  1. <?php
  2. namespace phpcn;
  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(5);
  19. // print_r($data);
  20. // 2. 视图:渲染模板
  21. $this->view->display($data);
  22. }
  23. }

自定义默认控制器

<?php

namespace phpcn;

class StaffModel extends Model
{
// 复用
}

  1. ### 视图模板
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8. <title>员工管理系统</title>
  9. </head>
  10. <body>
  11. <table border="1" cellspacing="0" cellpadding="5" width="400">
  12. <caption style="font-size: 1.2em;">员工信息表</caption>
  13. <thead bgcolor="lightcyan">
  14. <tr>
  15. <th>id</th>
  16. <th>姓名</th>
  17. <th>性别</th>
  18. <th>邮箱</th>
  19. <th>操作</th>
  20. </tr>
  21. </thead>
  22. <tbody>
  23. <?php foreach ($staffs as [$id,$name,$sex,$email]) : ?>
  24. <tr>
  25. <td><?= $id ?></td>
  26. <td><?= $name ?></td>
  27. <td><?= $sex ? '女' : '男' ?></td>
  28. <td><?= $email ?></td>
  29. <td>
  30. <a href="">编辑</a>
  31. <a href="">删除</a>
  32. </td>
  33. </tr>
  34. <?php endforeach ?>
  35. </tbody>
  36. </table>
  37. </body>
  38. </html>

入口文件

  1. <?php
  2. namespace phpcn;
  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. // echo $type;
  14. // 实例化模型类
  15. $dsn = sprintf('%s:dbname=%s', $type, $dbname);
  16. $model = new StaffModel($dsn, $username, $password);
  17. // https://php.edu/0506/mvc3/index.php?c=controller&a=action
  18. // c=控制器, a=控制器的方法
  19. $c = $_GET['c'] ?? APP['default_controller'];
  20. $a = $_GET['a'] ?? APP['default_action'];
  21. // echo $c,$a;
  22. // 获取类名
  23. $class = ucfirst($c) . 'Controller';
  24. // 加载自定义控制器类
  25. require __DIR__ . '/controller/' . $class . '.php';
  26. // 加载视图类
  27. $view = new View();
  28. // 完整控制器类名
  29. // echo $class;
  30. // echo __NAMESPACE__ . '\\' . $class;
  31. $fullclass = __NAMESPACE__ . '\\' . $class;
  32. $controller = new $fullclass($model, $view);
  33. // 执行控制器中的index()
  34. echo $controller->$a();

以上就是一个简单的MVC实例演示,运行index.php后效果如图:

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