博客列表 >PHP 利用composer写一个小框架

PHP 利用composer写一个小框架

王娇
王娇原创
2020年05月20日 16:01:35798浏览

学习总结

  • 使用第三方包可以加快项目的开发进度
  • 使用composer可以快速搭建项目框架

1.目录结构

2.composer.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": "^1.7",
  12. "league/plates": "^3.3",
  13. "nikic/fast-route": "^1.3"
  14. }
  15. }

3.1GoodsController.php 控制器

  1. <?php
  2. namespace controllers;//命名空间是包名称
  3. class GoodsController//类名必须与文件名一致
  4. {
  5. public function index()
  6. {
  7. echo $this->select();//显示/views/goods/show.php
  8. }
  9. public $model;
  10. public $view;
  11. public function __construct($model,$view)
  12. {
  13. $this->model = $model;
  14. $this->view = $view;
  15. }
  16. public function select()
  17. {
  18. //使用后台medoo框架获取数据
  19. $records = $this->model->select('tb_goods','*',['LIMIT'=>10]);
  20. //把medoo获取的数据返回到/views/goods/show.php
  21. return $this->view->render('goods/show', ['records' => $records]);
  22. }
  23. }
  24. ?>

3.2GoodsModel.php商品模型类

  1. <?php
  2. namespace models;
  3. use core\Model;
  4. //商品模型继承core中的Model
  5. class GoodsModel extends Model
  6. {
  7. public function __construct()
  8. {
  9. parent::__construct();
  10. }
  11. }
  12. ?>

3.3Model.php公共模型类

  1. <?php
  2. namespace models;
  3. use core\Model;
  4. //商品模型继承core中的Model
  5. class GoodsModel extends Model
  6. {
  7. public function __construct()
  8. {
  9. parent::__construct();
  10. }
  11. }
  12. ?>

3.4View.php公共视图类

  1. <?php
  2. namespace core;
  3. use League\Plates\Engine;
  4. //core中的View继承plates中的Engine
  5. class View extends Engine
  6. {
  7. protected $templeate;
  8. public function __construct($path)
  9. {
  10. $this->templeate = parent::__construct($path);
  11. }
  12. }
  13. ?>

3.5 show.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. * {
  9. padding: 0px;
  10. margin: 0px;
  11. box-sizing: border-box;
  12. }
  13. .show {
  14. width: 600px;
  15. height: 500px;
  16. border: 1px solid #555;
  17. margin-left: auto;
  18. margin-right: auto;
  19. margin-top: 20px;
  20. background-color: lightseagreen;
  21. display: flex;
  22. flex-flow: column nowrap;
  23. justify-content: space-evenly;
  24. align-items: center;
  25. }
  26. .show>div {
  27. width: 100%;
  28. border-bottom: 1px solid white;
  29. display: flex;
  30. flex-flow: row nowrap;
  31. justify-content: space-evenly;
  32. align-items: center;
  33. }
  34. .show>div:first-of-type {
  35. font-size: larger;
  36. font-weight: bolder;
  37. }
  38. .show>div>span {
  39. text-align: center;
  40. }
  41. .show>div>span:nth-of-type(1) {
  42. width: 50px;
  43. }
  44. .show>div>span:nth-of-type(2) {
  45. width: 150px;
  46. }
  47. .show>div>span:nth-of-type(3) {
  48. width: 150px;
  49. }
  50. .show>div>span:nth-of-type(4) {
  51. width: 100px;
  52. }
  53. </style>
  54. </head>
  55. <body>
  56. <div class="show">
  57. <h2>商品展示页面</h2>
  58. <div><span>编号</span><span>名称</span><span>价格</span><span>时间</span></div>
  59. <?php foreach($records as $record):?>
  60. <div>
  61. <!-- 通过GoodsController控制器中的select()方法返回的数据,可直接使用 -->
  62. <span><?= $this->e($record['id']) ?></span>
  63. <span><?= $this->e($record['name']) ?></span>
  64. <span><?= $this->e($record['price']) ?>\<?= $this->e($record['unit']) ?></span>
  65. <span><?= $this->e($record['sdate']) ?></span>
  66. </div>
  67. <?php endforeach;?>
  68. </div>
  69. </body>
  70. </html>

3.6 index.php首页

  1. <?php
  2. //自动加载三方控件和自已写的类,在根目录中的composer.json中的autoload字段包含自已的类
  3. require 'vendor/autoload.php';
  4. use controllers\GoodsController;
  5. use core\View;
  6. use models\GoodsModel;
  7. //GoodsModel继承自core中的Model,core中的Model继承自medoo三方控件
  8. $model = new GoodsModel();
  9. //View类来自core中的View类,core中的View类继承自plates中的Engine三方控件
  10. $view = new View('app/views');
  11. //创建一个控件器对象,传入模型和视图对象
  12. $controller = new GoodsController($model,$view);
  13. //调用控制器的index方法,显示页面内容
  14. $controller->index();
  15. ?>

3.7 页面效果展示

4 Composer命令上机效果

  • 安装medoo后端模板

  • 安装plates前端模板

  • 如果想自动加载自已写的类,必须在composer.json中添加autoload字段,然后用dump命令载入

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