Blogger Information
Blog 46
fans 0
comment 0
visits 34317
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
MVC实例演示
上草一方
Original
701 people have browsed it

创建配置文件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后效果如图:

Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post