#学习php扩展包开发:GitHub - Gelaku/weather: 基于高德开放平台接口的 PHP 天气信息组件。
https://zhangxueren.club/2018/11/build_composer_1.html
https://zhangxueren.club/2018/11/build_composer_2.html
#安装包构建工具
composer global require 'overtrue/package-builder' --prefer-source
#创建一个包
package-builder build [目标目录]
###################### start #######################
#示例创建一个天气SDK扩展包
package-builder build weather
# 然后按提示操作即可
# 包名:gelaku/weather
# 命名空间:gelaku\Weather
# 描述:A weather SDK
#需求分析
1.按地名查询实时天气;
2.获取最近的天气预报。
#功能设计
1.主要业务,获取天气信息;
2.异常处理,提供统一的异常类,方便调用芳定位异常;
3.自定义参数,需要支持自定义参数,比如超时时间等;
4.提供Laravel Service Provider,为Laravel框架提供专属封装的入口。
#安装依赖包
#项目需要请求接口,选择 guzzle/guzzle 来做为 http client
cd weather/
composer require guzzlehttp/guzzle
#编辑代码 从接口获取天气数据
src/Weather.php
src/Exceptions/Exception.php
#编写单页测试
#单元测试框架 PHPUnit、依赖模拟 Mockery
composer require phpunit/phpunit mockery/mockery
#phpunit讲解
1.测试用例与类名对应,以 Test.php结尾,比如 WeatherTest.php,类名与文件名一致
2.测试用例需要继承 PHPUnit\Framework\TestCase 基类;
3.测试用例的目录结构与源码一致;
4.测试用例的方法名格式为 test源方法名,比如:testGetWeather.
#创建测试类
tests/WeatherTest.php
#运行测试
./vendor/bin/phpunit --filter testGetWeatherWithInvalid
#错误提示
Failed asserting that exception of type "Gelaku\Weather\Exceptions\HttpException" matches expected exception "Gelaku\Weather\Exceptions\InvalidArgumentException". Message was: "cURL error 60: SSL certificate problem: unable to get
local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://restapi.amap.com/v3/weather/weatherInfo?key=dcbf9246de70cda4300ae60f3eb0b418&city=%E6%B7%B1%E5%9C%B3&extensions=base&output=json" at
解决方案:
访问https://curl.se/docs/caextract.html,下载cacert.pem,并在php.ini文件添加
curl.cainfo = "D:/Developer/phpstudy_pro/Extensions/php/php8.0.2nts/extras/ssl/cacert.pem"
openssl.cafile="D:/Developer/phpstudy_pro/Extensions/php/php8.0.2nts/extras/ssl/cacert.pem"
#为Laravel集成优化
将高德地图的 API KEY 和 API URL 放在config/services.php 中
config/services.php:
'weather' => [
'key' => env('WEATHER_API_KEY'),
//'url' => env('WEATHER_API_URL'),
],
#编写服务者提供者信息
src/ServiceProvider.php
#发布新包
1.https://github.com/Gelaku/weather 和 https://packagist.org/packages/submit 注册账号
git init # 初始化 git 项目
git add -A # 添加全部文件到 git
git commit -am "first commit" # 提交添加的文件
git remote add origin https://github.com/Gelaku/weather.git # 设置远程地址
git push -u origin master # 将提交推送到远程仓库
#添加代码版本号 https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE
git tag v1.0.0 #添加版本号
git push origin v1.0.0 #推送版本到 github
git push origin --tags #将所有不在远程仓库服务器上的标签全部传送到那里
git tag -d v1.0.0 #删除本地版本号
git push origin :refs/tags/v1.0.0 #将删除的版本号推送到 github
git push origin --delete v1.0.0 #直接删除远程标签
2.将github代码仓库与packagist做关联
|