欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编写迷你版MVC小框架具体步骤以及心得体会

程序员文章站 2022-03-06 13:39:39
...

框架目录结构:

  • app: 应用目录
    • controllers: 控制器目录
    • models: 模型目录
    • views: 视图目录
  • core: 核心目录
  • vendor: Composer类库目录
  • composer.json: Composer 定义文件

具体步骤如下:

1. 使用第三方包下载

  1. Model: composer require catfan/medoo 得到一个 vendor/catfan/medoo文件
  2. View: composer require league/plates 得到一个 vendor/league/plates文件

2. 打开配置文件composer.json

样式代码:

  1. {
  2. "name": "zhu/php.cn",
  3. "description": "this is a test",
  4. "require": {
  5. "catfan/medoo": "^1.7",
  6. "league/plates": "^3.4"
  7. },
  8. "autoload": {
  9. "psr-4": {
  10. "models\\": "app/models",
  11. "views\\": "app/views",
  12. "controllers\\": "app/controllers",
  13. "core\\": "core"
  14. }
  15. }
  16. }

3.新建core核心目录并在其下新建模型: Model 和视图: View 两个文件

Model.php样式代码:

  1. <?php
  2. // 模型类
  3. namespace core;
  4. use Medoo\Medoo;
  5. class Model extends Medoo
  6. {
  7. public function __construct()
  8. {
  9. parent::__construct([
  10. 'database_type' => 'mysql',
  11. 'database_name' => 'phpedu',
  12. 'server' => 'localhost',
  13. 'username' => 'root',
  14. 'password' => 'root',
  15. ]);
  16. }
  17. public function first()
  18. {
  19. // 自定义方法
  20. }
  21. }

View.php样式代码:

  1. <?php
  2. namespace core;
  3. use League\Plates\Engine;
  4. class View extends Engine
  5. {
  6. public $templates;
  7. public function __construct($path)
  8. {
  9. $templates = parent::__construct($path);
  10. }
  11. }

4. 在app目录下新建controllers models views 三个目录

4.1 在controllers目录下新建StaffsController.php文件,用来获取用户数据赋值给模板

StaffsController.php样式代码:

  1. <?php
  2. namespace controllers;
  3. class StaffsController
  4. {
  5. public $model;
  6. public $view;
  7. public function __construct($model, $view)
  8. {
  9. $this->model = $model;
  10. $this->view = $view;
  11. }
  12. public function index()
  13. {
  14. return __METHOD__;
  15. }
  16. public function select()
  17. {
  18. // 获取数据
  19. $staffs = $this->model->select('staffs', ['id', 'name', 'gender', 'salary', 'email'], ['salary[>=]' => 6000, 'LIMIT' => 6]);
  20. // 模板赋值
  21. return $this->view->render('staffs/list', ['staffs' => $staffs]);
  22. }
  23. }

4.2 在Models目录下新建StaffsModel.php文件,用来获取表数据

StaffsModel.php样式代码:

  1. <?php
  2. namespace models;
  3. use core\Model;
  4. // 自定义模型类通常与一张数据表绑定,继承自框架核心模型类
  5. class StaffsModel extends Model
  6. {
  7. public function __construct()
  8. {
  9. parent::__construct();
  10. }
  11. }

4.3 在Views目录下新建一个staffs文件夹,在该文件夹下面新建list.php文件

list.php样式代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>员工信息</title>
  7. <style>
  8. body {
  9. display: flex;
  10. flex-direction: column;
  11. align-items: center;
  12. }
  13. table {
  14. border-collapse: collapse;
  15. border: 1px solid;
  16. width: 50%;
  17. text-align: center;
  18. }
  19. th,
  20. td {
  21. border: 1px solid;
  22. padding: 5px;
  23. }
  24. tr:first-child {
  25. background-color: #0ff;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <h3>用户管理系统</h3>
  31. <table>
  32. <tr>
  33. <th>id</th>
  34. <th>姓名</th>
  35. <th>性别</th>
  36. <th>工资</th>
  37. <th>邮箱</th>
  38. <th>操作</th>
  39. </tr>
  40. <?php foreach ($staffs as $uname): ?>
  41. <tr>
  42. <td><?=$this->e($uname['id'])?></td>
  43. <td><?=$this->e($uname['name'])?></td>
  44. <td><?=$this->e($uname['gender']) == 'male' ? '男' : '女'?></td>
  45. <td><?=$this->e($uname['salary'])?></td>
  46. <td><?=$this->e($uname['email'])?></td>
  47. <td><button>编辑</button>&nbsp;<button>删除</button></td>
  48. </tr>
  49. <?php endforeach ?>
  50. </table>
  51. <p>
  52. <a href="">1</a>
  53. <a href="">2</a>
  54. <a href="">3</a>
  55. <a href="">4</a>
  56. <a href="">5</a>
  57. <a href="">6</a>
  58. </p>
  59. </body>
  60. </html>

5. composer.json 将控件映射到目录

composer.json样式代码: 完成后开启终端输入 composer dump 更新自动加载

  1. {
  2. "name": "zhu/php.cn",
  3. "description": "this is a test",
  4. "require": {
  5. "catfan/medoo": "^1.7",
  6. "league/plates": "^3.4"
  7. },
  8. "autoload": {
  9. "psr-4": {
  10. "models\\": "app/models",
  11. "views\\": "app/views",
  12. "controllers\\": "app/controllers",
  13. "core\\": "core"
  14. }
  15. }
  16. }

6. index.php 入口文件

  1. <?php
  2. // 入口文件
  3. use models\StaffsModel;
  4. use controllers\StaffsController;
  5. use core\View;
  6. require __DIR__ . '/vendor/autoload.php';
  7. // 测试模型
  8. $model = new StaffsModel();
  9. // 测试视图
  10. $view = new View('app/views');
  11. // 测试控制器
  12. $controller = new StaffsController($model,$view);
  13. print_r($controller->select());

运行效果预览:

编写迷你版MVC小框架具体步骤以及心得体会

总结:

  1. 第一步先安装配置好 composer 下载地址: https://pkg.phpcomposer.com/
  2. 第二步找到composer所需的第三方包依赖进行快速搭建模型Model与视图View
  3. 第三步 创建一个核心目录文件夹
  4. 第四步 创建app目录,搭建起MVC架构
  5. 第五步 配置好composer.js文件,用来映射目录文件
  6. index.php 是入口文件得注意use导入名称信息