博客列表 >0221作业+用composer手撸MVC框架+10期线上班

0221作业+用composer手撸MVC框架+10期线上班

江川林
江川林原创
2020年03月03日 14:03:24566浏览

前言:

在自己手撸之前,看了视频4遍,还是觉得逻辑不清晰,有点乱,可能是以为接触得少加上基础不行,所以又去搜索了一些相关资料,最后将框架撸出来后,再把逻辑理一下,发现其实都是有规律存在的,并不难

所以,大家一定要:多看多练多去理解,很重要

———————————————————————————

正题:用composer手撸MVC框架(还是用老师的流程)

一,在用composer之前,首先要知道composer的常用指令
1,搜索一个包composer search
2,安装一个包composer requirecomposer install
3,更新一个包composer update
4,删除一个包composer remove
5,依赖打包composer archive(本次未用)
6,类库映射composer dump(很重要)
7,生成/更新composer.jsoncomposer init
8,从composer创建项目
composer create-project 包 项目目录
二,详细步骤
-创建首页文件,生成composer.json文档,再利用终端指令composer install生成composer相关文档和目录,其中的autoload.php就是非常重要的composer自动加载器

-创建核心文件夹,新建文档Bootstrap.php,在里面设置与文档路径一致的命名空间,并且生成一个和文档名一样的类名

-在composer.json中设置类库映射,并且执行composer dump

-在Bootstrap.php这个文档中,进行URL解析,解析出相对应的控制器和方法

-再新建控制器,在控制里面测试视图类和模型类

同时就要新建控制器文件、视图文件类、模型类文件
注意:
-在视图类文件中,需要有以下几步:
1,模板文件
2,模板变量(建立数组)
3,读取模板文件(make方法):给模板文件赋值
4,分配模板变量(with方法):将参数传进数组中,成为关联数组
5,加载模板文件:__toString()
流程:// make —> with —> toString

-在模板类文件里面,需要以下几步:
1,连接对象
2,设置数据表
3,连接数据库:__construct()
4,设置数据表
5,进行是数据库操作

以上是大体的框架流程:
最主要的是要理解composer自动加载原理,这个框架执行顺序和MVC框架的原理

因为代码量较大,以下是关键代码:
Bootstrap.php

  1. <?php
  2. //框架启动器
  3. namespace core;
  4. use web\controller\Controller;
  5. use web\controller\Undefined;
  6. class Bootstrap
  7. {
  8. public static function run()
  9. {
  10. // echo '我是框架启动器';
  11. // echo '<hr>';
  12. Bootstrap::parseUrl();
  13. }
  14. // 解析URL里面的控制器和方法
  15. public static function parseUrl()
  16. {
  17. // 获取URL中的字符串
  18. $_SERVER['QUERY_STRING'];
  19. // 以数组的形式解析出来
  20. parse_str($_SERVER['QUERY_STRING'], $url);
  21. // 判断解析出来的URL数据,是自定义控制器还是默认控制器
  22. if (isset($_GET['c'])){
  23. // 生成自定义控制器的类名
  24. $controller = 'web\controller\\' . ucfirst($url['c']);
  25. // 生成自定义控制器的方法名
  26. $action = $url['a'];
  27. // 解析URL中的其他参数
  28. $other = array_filter(array_slice($url, 2));
  29. //$site = php.cn;
  30. extract($other);
  31. }else{
  32. // 如果URL中没有解析到自定义的控制器和方法,则使用默认的控制器和方法
  33. // 默认控制器的类名
  34. $controller = 'web\controller\Undefined';
  35. // 默认控制器的方法名
  36. $action = 'action';
  37. }
  38. // 测试控制器
  39. echo (new $controller)::$action($site);
  40. }
  41. }

Controller.php

  1. <?php
  2. namespace web\controller;
  3. use core\View;
  4. use core\Model;
  5. use function core\dump;
  6. class Controller
  7. {
  8. public static function action()
  9. {
  10. echo '自定义的控制器:' . __METHOD__;
  11. }
  12. public static function study($site)
  13. {
  14. echo '我在:' . $site . ',学习PHP';
  15. }
  16. // 测试视图模板
  17. public static function index()
  18. {
  19. // 实例化视图类
  20. $view = new View();
  21. return $view->make('View')->with('site', 'php.cn');
  22. }
  23. // 测试模型模板
  24. public static function modelTest()
  25. {
  26. // 获取数据
  27. // 实例化模型类
  28. $model = new Model('mysql:host=localhost;dbname=phpedu', 'root', 'root');
  29. // 进行多条查询
  30. $datas= $model->select('staffs');
  31. // 渲染模板
  32. // 实例化视图类
  33. $view = new View();
  34. return $view->make('Model')->with('datas', $datas);
  35. }
  36. }

View

  1. <?php
  2. namespace core;
  3. class View
  4. {
  5. // 模板文件
  6. protected $file;
  7. // 模板变量
  8. protected $params= [];
  9. // 读取模板文件
  10. public function make(string $data) : object
  11. {
  12. $this->file = 'view/' . $data . '.php';
  13. return $this;
  14. }
  15. // 分配模板变量
  16. public function with(string $name, $values) : object
  17. {
  18. $this->params[$name] = $values;
  19. return $this;
  20. }
  21. // 加载并渲染模板
  22. public function __toString() : string
  23. {
  24. // 解析出变量
  25. extract($this->params);
  26. // 加载模板文件
  27. require $this->file;
  28. return ' ';
  29. }
  30. // make --> with --> toString
  31. }

Model

  1. <?php
  2. namespace core;
  3. use Nette\Database\Connection;
  4. class Model
  5. {
  6. // 连接对象
  7. private $database;
  8. // 数据表名称
  9. private $table;
  10. // 连接数据库
  11. public function __construct($dsn, $user, $password)
  12. {
  13. return $this->database = new Connection($dsn, $user, $password);
  14. }
  15. // 设置数据表
  16. public function table(string $table) : object
  17. {
  18. $this->table = $table;
  19. return $this;
  20. }
  21. // 查询数据库信息,多条查询
  22. public function select($table)
  23. {
  24. return $this->table($table)->database->query( 'SELECT * FROM ' . $this->table);
  25. }
  26. // 单条查询
  27. public function one($table, $id)
  28. {
  29. return $this->table($table)->query('SELECT * FROM ' . $this->table. ' WHERE id=? ', $id)->dump();
  30. }
  31. }

谢谢老师审阅!

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