博客列表 >Facade门面类-composer常用指令-自动加载器使用

Facade门面类-composer常用指令-自动加载器使用

葡萄枝子
葡萄枝子原创
2021年03月04日 19:10:40671浏览

Facade门面类-composer常用指令-自动加载器使用

熟悉composer常用指令,会安装组件,并理解自动加载器的使用方式与更新方法

1. 新建 0303 目录,子目录 mvc 创建文件 model.php, view.php, controller.php

  • model.php 模型类,获取数据
  1. namespace mvc_demo;
  2. use PDO;
  3. // 模型类
  4. class Model
  5. {
  6. // 获取数据
  7. public function getData()
  8. {
  9. $pdo = new PDO('mysql:host=localhost;dbname=phpedu;charset=utf8mb4', 'root', 'root', array(
  10. PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
  11. ));
  12. $sql = "SELECT id, name, gender FROM staffs limit 5";
  13. return $pdo->query($sql);
  14. }
  15. }
  • view.php 视图类,展示数据
  1. namespace mvc_demo;
  2. // 视图类
  3. class View
  4. {
  5. // 数据展示
  6. public function fetch($datas)
  7. {
  8. $res = '';
  9. foreach ($datas as $data) {
  10. $res .= print_r($data, true) . '<br>';
  11. }
  12. return $res;
  13. }
  14. }
  • controller.php 控制器,渲染数据
  1. namespace mvc_demo;
  2. use Closure;
  3. // 加载模型
  4. require 'model.php';
  5. // 加载视图
  6. require 'view.php';
  7. // 服务容器
  8. class Container
  9. {
  10. // 对象容器
  11. protected $instances = [];
  12. // 添加容器
  13. public function bind($alias, Closure $process)
  14. {
  15. $this->instances[$alias] = $process;
  16. }
  17. // 取出对象
  18. public function make($alias, $params = [])
  19. {
  20. return call_user_func_array($this->instances[$alias], $params);
  21. }
  22. }
  23. // 门面类,普通方法静态化
  24. class Facade
  25. {
  26. // 容器属性
  27. protected static $container = null;
  28. // 容器静态方法
  29. public static function initilize(Container $container)
  30. {
  31. static::$container = $container;
  32. }
  33. }
  34. // 模型类访问静态化
  35. class StaffsModel extends Facade
  36. {
  37. public static function getData()
  38. {
  39. return static::$container->make('model')->getData();
  40. }
  41. }
  42. // 视图类访问静态化
  43. class StaffsView extends Facade
  44. {
  45. public static function fetch($datas)
  46. {
  47. return static::$container->make('view')->fetch($datas);
  48. }
  49. }
  50. // 控制器,工作类
  51. class Controller
  52. {
  53. public function __construct(Container $container)
  54. {
  55. Facade::initilize($container);
  56. }
  57. public function index()
  58. {
  59. // 获取数据
  60. $datas = StaffsModel::getData();
  61. // 渲染数据
  62. return StaffsView::fetch($datas);
  63. }
  64. }
  65. // 依赖的对象添加到容器中
  66. $container = new Container();
  67. $container->bind('model', function () {
  68. return new Model();
  69. });
  70. $container->bind('view', function () {
  71. return new View();
  72. });
  73. // 实例化控制器,显示数据
  74. $controller = new Controller($container);
  75. echo $controller->index();

2. 熟悉composer常用指令,会安装组件,并理解自动加载器的使用方式与更新方法

2.1 composer常用指令

命令 描述
composer init 交互创建composer.json
composer selfupdate composer更新到最新
composer install 安装 composer.json 中 require 声明的依赖包,文件内容可以是 {}
composer require 安装包写入 composer.json 的 require 中
composer create-project 创建项目
composer update 忽略锁文件 composer.lock 更新 composer.json 中的依赖包
composer search 搜索包( https://packagist.org )
composer config 配置 composer (镜像源)
composer dump 更新 composer.json 中 autoload 配置项
composer help update 命令帮助
composer list 命令列表
composer -V 查看版本号

2.2 安装组件,理解自动加载器的使用与更新

  • 下载 getcomposer.org/composer.phar 移至 php.exe 所在目录

  • 同目录下创建批处理 composer.bat 添加内容 @php "%~dp0composer.phar" %* 保存

  • 将 php.exe 所在目录添加到系统环境变量

  • 配置案例云镜像源,打开 cmd 输入命令 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

  • vscode 中,0303 目录创建 composer.json 内容为 {},打开终端,进入 0303 目录,输入 composer -install

获取vendor

  • 安装组件 composer search captcha 搜索验证码组件,执行 composer require gregwar/captcha 安装组件

验证码组件

  • 自动加载,将 controller.php 的 Container 类中 require 'model.php'require 'view.php' 注释,引入 vendor 自动加载文件
    require dirname(__DIR__) .'/vendor/autoload.php'

自动加载

  • 修改 composer.json 内添加,类名映射到目录
  1. "autoload": {
  2. "classmap": ["mvc"]
  3. },
  • 或者改为 psr-4 标准,空间名映射到目录
  1. "psr-4": {
  2. "mvc_demo\\": "mvc"
  3. }
  • 自动加载更新,终端运行 composer dump

composer

  • 运行 mvc 目录下的 controller.php 已实现自动加载

自动加载

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