博客列表 >Composer 自撸一个简单的MVC框架

Composer 自撸一个简单的MVC框架

手机用户1617360551
手机用户1617360551原创
2021年08月27日 15:56:37664浏览

Composer自撸一个简单的MVC框架


1.创建MVC架构,视图层,模型层,控制器


2. 创建JSON文件

  1. {
  2. "autoload": {
  3. "psr-4": {
  4. "controllers\\":"app/controllers",
  5. "models\\":"app/models",
  6. "views\\":"app/views",
  7. "core\\":"core"
  8. }
  9. },
  10. "require": {
  11. "catfan/medoo": "^2.1",
  12. "league/plates": "^3.4"
  13. }
  14. }

3.通过Compoesr命令 composer update引入

4.引入第三方包:

通过第三方包提供的Composer命令,将第三方包引入

catfan/medoo模型包

medoo包内容

league/plates视图包

plates包内容

5.通过JOSN文件,加载Composer的自动加载机制

  1. {
  2. "autoload": {
  3. "psr-4": {
  4. "controllers\\":"app/controllers",
  5. "models\\":"app/models",
  6. "views\\":"app/views",
  7. "core\\":"core"
  8. }
  9. },
  10. "require": {
  11. "catfan/medoo": "^2.1",
  12. "league/plates": "^3.4"
  13. }
  14. }

6.创建自己的核心代码,Model,View去继承第三方包

自己的MODEL

自己的VIEW

入口文件

7.代码展示:

核心代码MODEL

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

核心代码VIEW

  1. <?php
  2. namespace core;
  3. use League\Plates\Engine;
  4. //公共视图
  5. class View extends Engine
  6. {
  7. private $templates;
  8. public function __construct($path)
  9. {
  10. $this->templates = parent::__construct($path);
  11. }
  12. }

MVC架构

视图层

  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. </head>
  9. <body>
  10. <h3>员工表</h3>
  11. <table>
  12. <tr>
  13. <td>id</td>
  14. <td>姓名</td>
  15. <td>密码</td>
  16. <td>性别</td>
  17. <td>管理</td>
  18. </tr>
  19. <?php foreach($staffs as $staff): ?>
  20. <tr>
  21. <td><?= $this->e($staff['id']) ?></td>
  22. <td><?= $this->e($staff['uname']) ?></td>
  23. <td><?= $this->e($staff['pwd']) ?></td>
  24. <td><?= $this->e($staff['gender'])?></td>
  25. <td><button>编辑</button><button>删除</button></td>
  26. </tr>
  27. <?php endforeach ?>
  28. </table>
  29. <p>
  30. <a href="">1</a>
  31. <a href="">2</a>
  32. <a href="">3</a>
  33. <a href="">4</a>
  34. <a href="">5</a>
  35. <a href="">6</a>
  36. </p>
  37. </body>
  38. </html>

模型层

  1. <?php
  2. namespace models;
  3. use core\Model;
  4. class StaffsModel extends Model
  5. {
  6. public function index()
  7. {
  8. return 'OK';
  9. }
  10. public function __construct()
  11. {
  12. parent::__construct();
  13. }
  14. }

控制器

  1. <?php
  2. //命名空间:包名称
  3. namespace controllers;
  4. use core\Model;
  5. class StaffsController
  6. {
  7. public $model;
  8. public $view;
  9. public function __construct($model,$view)
  10. {
  11. $this->model = $model;
  12. $this->view = $view;
  13. }
  14. public function index()
  15. {
  16. return 'Hello php.cn';
  17. }
  18. public function display()
  19. {
  20. include 'app/views/staffs/list.php';
  21. }
  22. //查询
  23. public function select()
  24. {
  25. $staffs = $this->model->select('user',['id','uname','pwd','gender']
  26. ,['id[>=]'=>5,'LIMIT'=>10]
  27. );
  28. return $this->view->render('staffs/list',['staffs' =>$staffs]);
  29. }
  30. }

入口文件

  1. <?php
  2. require 'vendor/autoload.php';
  3. use controllers\StaffsController;
  4. use core\View;
  5. use models\StaffsModel;
  6. // //控制器
  7. // echo (new StaffsController)->index();
  8. // echo '<hr>';
  9. // //模型
  10. // echo (new StaffsModel)->index();
  11. // echo '<hr>';
  12. // //视图
  13. // echo (new StaffsController)->display();
  14. //模型处理
  15. $model = new StaffsModel();
  16. // var_dump($model);
  17. // echo '<hr>';
  18. //视图
  19. $view = new View('app/views');
  20. // var_dump($view);
  21. // echo '<hr>';
  22. //查询
  23. $controller = new StaffsController($model,$view);
  24. // var_dump($controller);
  25. echo $controller->select();

拿到数据

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