简介
- 为了管理和今后使用,我们需要将一些常用的类库打包到composer 上,这样之后就比较方便了,本文介绍如何建立一个composer 的类库。
- 代码包,我们使用
https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Message_Encryption/Technical_Plan.html
中的事例代码。 - 下载地址:
https://wximg.gtimg.com/shake_tv/mpwiki/cryptoDemo.zip
-
下载后截取php 文件中的代码:
如果你只是想使用类库
-
composer require klib/wxtools
安装工具包,到你的项目。 - 参考:
初始化composer
-
首先进入刚才下载的php目录中,
ls -lh
看一下目录中的文件和结构。
如果你使用的是PHP7,需要注意的情况,
mcrypt_module_open、mcrypt_generic_init、mdecrypt_generic、mcrypt_generic_deinit、mcrypt_module_close
函数已经不建议使用,为了避免警告信息前面可以加上@
符号进行屏蔽,比如@mdecrypt_generic
。如果你使用的是PHP7,还需要注意这个类库写的比较早,需要里面PHP的类的构造方法为
__construct
因为PHP7语法上已经不支持同名构造方法了,如果是PHP5版本则不存在这个问题。输入
composer init
初始化composer 项目,我输入的包名称:klib/wxtools
,随便输入一个描述,type 输入library ,建立后端composer.json
大致如下
{
"name": "klib/wxtools",
"description": "Make wxchar msg srypto lib.",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "LinHai",
"email": "mail@mail.com"
}
],
"minimum-stability": "dev",
"require": {}
}
添加composer 的 autoload
-
为了结构化代码,我先创建了一个新的目录结构,对于发布composer来书这个是可选的
mkdir -p src/WxTools/Crypto
,然后把除了 demo.php composer.json 以外的文件全部拖动到src/WxTools/Crypto
中,结构如下:
修改
vim composer.json
主要是添加了 php >=7.0 的require,和autoload 的配置部分。
{
"name": "klib/wxtools",
"description": "Make wxchar msg srypto lib.",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "LinHai",
"email": "kami@cancanyou.com"
}
],
"minimum-stability": "dev",
"require": {
"php": ">=7.0"
},
"autoload": {
"psr-4": {
"KLib\\WxTools\\": "src/WxTools"
}
}
}
- 之后执行
composer install
生成vendor 目录。
测试composer - autoload 工作情况
-
首先把这个类库规范化一下,首先就是改文件名,一个文件放一个class,文件名用class命名,这个很好修改,改完后大致这样:
- 之后给每个类新增
namespace KLib\WxTools\Crypto ;
命名空间,并且注释掉类中原来的include_once
、require_once
这种引用,比如WXBizMsgCrypt
修改demo.php
- 这个文件解压缩后就有,之前一直没有动过,放在和composer.json 同一个目录里,我们就通过这个文件进行功能的测试。
-
修改方法很简单,第一、引入KLib\WxTools\Crypto命名空间。第二、引入/vendor/autoload.php。第三,注释掉原来的include_once,效果如下:
页面运行demo.php
-
简直不要太顺利,成功了。
发布这个类库到composer公网
为了能更方便安装到其他项目中,也方便其他有需要人的使用,还需要发布这个类库到composer仓库中。
需要一个公网上可以访问的git仓库,推荐使用
https://github.com/
在这里创建账号仓库,把这个项目传上去,如果不太明白什么意思请先百度git使用相关内容。-
我们还是在php目录,也就是composer.json 文件所在的目录下面输入
git init
进行git 初始化,它提示初始化了一个空仓库。
-
COPY 你github 网站的源地址,比如我的是:
git@github.com:kami1983/klib-wxtools.git
-
新增一个远程源输入命令
git remote add origin git@github.com:kami1983/klib-wxtools.git
(注意相对应的git地址需要替换成你自己的不可完全照抄。)
推送文件到github 上 ,输入命令:
# 建立 .gitignore 文件,忽略掉vendor 这个目录,这个目录不需要上传。
echo "**/vendor" >> .gitignore
# 这个文件也不需要上传
echo "composer.lock" >> .gitignore
# 将当前目录及子目录全部添加并提交到本地代码仓库
git add --all;git commit -m "WxTools - v1.0"
# 将代码直接推送到远程仓库
git push origin master:master
-
去git hub 上看看有没有文件,文件全部存在。
给当前软件版本打标签并上传到github
git tag -a "v1.0.1" -m "Wxtool initial version."
git push origin v1.0.1
-
上推后github 上也有体现,如果没有说明上推失败。
登录packagist
- 登录
https://packagist.org/
如果没有账号就先创建一个。 -
点击导航栏上面的 Submit 按钮准备提交仓库:
- 提交仓库
git@github.com:kami1983/klib-wxtools.git
(这里请对应替换) -
提交完成后大致变成这个傻样子,下面红色的提示说这个包不会自动更新需要配置自动更新,这个和需要使用GitHook的钩子来实现。
配置包文件的自动更新
-
首选阅读
the doc
这个很重要,提取出重要的https://packagist.org/api/github?username=XXXX
地址信息。
-
the docs
的内容大致如下
先获取Packagist网站上的
Api Token
点击用户名->Profile
,COPY到剪切板,然后切换回github 。
- github 上点击
settings
->webhook
- 如实填写,这些信息,Packagist 上都有,最后点击
Add webhook
上推一个新版本测试一下
git tag -a "v1.0.2" -m "New version."
git push origin v1.0.2
-
自动同步完成WebHook,工作正常,此时浏览 packagist.org 大致如下:
结束
- 感谢阅读。