DIY 实现 ThinkPHP 核心框架(五)Composer

什么是 Composer ?

ComposerPHP 用来管理依赖关系的工具,可以通过它自动安装这些依赖的库文件。此外,Composer 可以实现类的自动加载以及创建自己的包。 Composer 的安装 非常简捷。

实现类的自动加载

/home/web/mytp 目录下创建 composer.json 文件

{
  "autoload": {
      // 仿 ThinkPHP 构建命名空间 app
    "psr-4": {"app\\": "application/"}
  }
}

上述代码表示自动加载的类文件须遵循 PSR-4 规范, app\\ 表示命名空间 appapplication/ 表示 application 目录,含义为将命名空间 app 映射到 application 目录,需要加载命名空间 app 的类时,在 application 目录中查找相应文件。命名空间 app 的子命名空间会映射为 application 目录下的对应目录。

         命名空间                                 目录
app\index\controller\Index <=> application/index/controller/Index.php

进入到 composer.json 所在目录,执行 composer install 命令初始化自动加载,并安装相应依赖关系所需组件。正常情况下输出

Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files

操作完成后,当前目录下会生成一个 vendor 目录,结构如下

vendor
    ├── autoload.php
    └── composer
        ├── autoload_classmap.php
        ├── autoload_namespaces.php
        ├── autoload_psr4.php
        ├── autoload_real.php
        ├── autoload_static.php
        ├── ClassLoader.php
        ├── installed.json
        └── LICENSE

需要更新依赖包或者库文件时,只需修改 composer.json 的文件至需要的版本,再执行 composer update 命令。引入命名空间机制后,类名无需显示控制器或者模板的名称,更改如下

EmployeeController.php => Employee.php
EmployeeModel.php => Employee.php
// 相应文件中的类名也需要做更改以符合 PSR-4 规范

在入口文件 index.php 中引入 vendor/autoload.php

<?php
require '../vendor/autoload.php';

编辑 Shell 脚本 start.sh 实现 NginxPhp-fpm 开机自启

#!/bin/bash
#chkconfig:2345 80 30
#description:auto_run
#
#

/usr/local/nginx/sbin/nginx
/usr/local/php/sbin/php-fpm
systemctl stop firewalld

添加脚本到开机自动启动项目中

chkconfig --add start.sh

访问 diy.tp/index.php

类的自动加载功能已经实现

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!