Blogger Information
Blog 29
fans 0
comment 0
visits 19514
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
MVC示例演示
千里马遇伯乐
Original
486 people have browsed it

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

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