annshress / weather-package
OpenWeather API 的客户端包装器。
Requires
- guzzlehttp/guzzle: ^7.4
This package is auto-updated.
Last update: 2024-09-07 03:13:30 UTC
README
创建 composer 包是一个简单直接的过程。在本教程中,我们将创建一个简单的 composer 包并将其部署到 Packagist。
目录
简介 - 创建包的基本知识
创建账户
Packagist 是 PHP 包的主要 Composer 仓库。它聚合了所有可使用 Composer 安装的公共 PHP 包。
由于本教程的最终目标是创建一个包并使其公开可用,因此我们需要创建 GitHub 和 Packagist 账户以部署我们的包。
如果您还没有,可以按照 GitHub 网站上的说明在 https://github.com/ 上创建账户。
有趣的事实,如果您还没有,可以查看 GitHub Student Pack -- 它是一个很好的学习资源。
之后,在 https://packagist.org.cn/ 上创建 Packagist 账户。您可以通过访问 Packagist 网站,然后点击“注册”按钮来完成此操作。我们目前不会使用该账户,但稍后我们将需要它。
注意:请记住您的 Packagist 用户名,它将在下一步中使用。
初始化您的包
是时候开始创建我们的包了。要创建包,您需要设置包目录,并用一个 composer.json
文件初始化您的包。 composer.json
文件是存储包信息的文件。为此,您可以运行以下命令。
- 在您的本地机器上,为您的包创建一个目录并进入它。
mkdir my-package
cd my-package
- 使用
composer.json
文件和默认文件结构初始化您的包。
composer init
在这里,您应该使用您的 Packagist 用户名作为供应商名称(例如 liererkt
),后面跟包名称(例如 my-package
),由 /
分隔。这应该看起来像 liererkt/my-package
。有关更多详细信息,请参阅示例输出。
注意:供应商名称不必是您的 Packagist 用户名,但这将使跟踪事物更容易。
示例输出
Package name (<vendor>/<name>) [ubuntu/package]: liererkt/my-first-package Description []: This is my first package! Author [Kyle Lierer <liererkt@miamioh.edu>, n to skip]: Minimum Stability []: Package Type (e.g. library, project, metapackage, composer-plugin) []: project License []: MIT Define your dependencies. Would you like to define your dependencies (require) interactively [yes]? no Would you like to define your dev dependencies (require-dev) interactively [yes]? no Add PSR-4 autoload mapping? Maps namespace "Liererkt\MyFirstPackage" to the entered relative path. [src/, n to skip]: { "name": "liererkt/my-first-package", "description": "This is my first package!", "type": "project", "license": "MIT", "autoload": { "psr-4": { "Liererkt\\MyFirstPackage\\": "src/" } }, "authors": [ { "name": "Kyle Lierer", "email": "liererkt@miamioh.edu" } ], "require": {} } Do you confirm generation [yes]? yes Generating autoload files Generated autoload files PSR-4 autoloading configured. Use "namespace Liererkt\MyFirstPackage;" in src/ Include the Composer autoloader with: require 'vendor/autoload.php';
文件结构解释
在深入了解实际代码之前,让我们看看我们的包的文件结构。文件结构如下:
vendor/
├─ composer/
├─ autoload.php
src/
composer.json
vendor/
:这是我们所有依赖项存储的地方。src/
:这是我们代码存储的地方。composer.json
:这是我们包信息存储的地方。
编写我们的包代码
现在我们已经有了包目录和 composer.json
文件,我们可以开始编写代码了。我们将从创建一个 src/Hello.php
文件开始。这将是我们的包的入口点。
然后,我们将向 src/Hello.php
文件中添加一些简单的测试代码,稍后我们将在将其部署到 Packagist 一次之后添加更多功能。
- 进入
src/
目录。
cd src
- 创建一个
Hello.php
文件。
touch Hello.php
- 将以下代码添加到
Hello.php
文件中。
<?php /* * (c) Your Name <your email> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace liererkt\MyFirstPackage; class Hello { public function say($name) { return "Hello, $name!"; } } ?>
设置包仓库
为了部署我们的包,我们将使用GitHub仓库。我们将使用GitHub API和webhook来触发我们的包部署。首先,创建一个空白的GitHub仓库,不包含任何文件。
- 在GitHub上创建空仓库后,初始化本地仓库。
git init git remote add origin git@github.com::<your username>/<your project name>.git
- 创建一个
.gitignore
文件并将供应商目录添加到其中。
touch .gitignore echo "vendor/" >> .gitignore
- 提交更改。
git add . git commit -m "Initial commit" git branch -M main git push -u origin main
将包提交到 Packagist
现在我们已经准备好了包,我们可以将其提交到Packagist。
-
前往您的Packagist账户设置并选择“连接到GitHub”选项。这样,您的Packagist账户就可以访问您的GitHub账户,并能够部署您的包。
-
前往Packagist首页并点击“提交包”按钮。
-
填写表单,输入您的GitHub仓库URL,然后点击“提交”按钮。
-
恭喜!您的包现在可在Packagist上使用,并在您向GitHub仓库推送时更新。
注意:Packagist根据GIT标签确定您的包的稳定性。默认情况下,它将是dev。因此,要使用它,您需要指定分支和dev,例如:composer require liererkt/my-first-package:dev-main
。例如,命令git tag v1.0.0
将标记您的分支为稳定。
作业 - 创建您的自己的包
虽然我们已经创建了一个简单的包,但我们可以用它做更多的事情。出于本教程的目的,我们将修改现有的包,使其成为OpenWeatherAPI的简单PHP包装器。根据以下要求,创建您自己的更复杂的包。
要求
创建一个具有以下功能的OpenWeatherAPI PHP包装器
- 一个客户端,可以用来向OpenWeatherAPI发送
getCurrentWeather
请求。 - OpenWeather请求/响应对象的模型类。
- WeatherDay
- Location
在作业结束时,您应该有三个类(或类似类)
- OpenWeatherClient
- WeatherDay
- Location
注意,建议遵循下面的类图(尽管这不是必需的)
类图
主要挑战
- 将Guzzle/HTTP客户端添加到我们的包中
- 确定如何处理API密钥
- 如何在一个包中处理多个类
- 如何处理错误处理