annshress / my-package
OpenWeather API 的客户端封装。
Requires
- guzzlehttp/guzzle: ^7.4
This package is auto-updated.
Last update: 2024-09-07 02:43:29 UTC
README
创建 composer 包是一个简单直接的过程。在本教程中,我们将创建一个简单的 composer 包并将其部署到 Packagist。
目录
简介 - 创建包的基础知识
创建账户
Packagist 是 PHP 包的主要 Composer 仓库。它聚合了所有可以通过 Composer 安装的公共 PHP 包。
由于本教程的最终目标是创建一个包并将其公开,我们需要创建一个 GitHub 和 Packagist 账户以部署我们的包。
如果您之前还没有,您可以通过访问 https://github.com/ 上的 GitHub 网站上的说明来创建一个 GitHub 账户。
有趣的事实,如果您之前还没有,请查看 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
文件,并将vendor目录添加到其中。
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密钥
- 如何在单个包中处理多个类
- 如何处理错误处理