annshress/my-package

OpenWeather API 的客户端封装。

安装: 0

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:项目

dev-main 2022-05-06 21:36 UTC

This package is auto-updated.

Last update: 2024-09-07 02:43:29 UTC


README

Composer Intro

创建 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 文件是存储您的包信息的文件。为此,您可以运行以下命令。

  1. 在您的本地机器上,为您的包创建一个目录并进入该目录。
mkdir my-package
cd my-package
  1. 使用 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 一次后添加更多功能。

  1. 进入 src/ 目录。
cd src
  1. 创建一个 Hello.php 文件。
touch Hello.php
  1. 将以下代码添加到 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上创建一个空的仓库,不包含任何文件。

  1. 在GitHub上创建空仓库后,初始化您的本地仓库。
git init
git remote add origin git@github.com::<your username>/<your project name>.git
  1. 创建一个.gitignore文件,并将vendor目录添加到其中。
touch .gitignore
echo "vendor/" >> .gitignore
  1. 提交更改。
git add .
git commit -m "Initial commit"
git branch -M main
git push -u origin main

将包提交到 Packagist

现在我们有了准备好的包,我们可以将其提交到Packagist。

  1. 前往您的Packagist账户设置,并选择“连接到GitHub”选项。这样,您的Packagist账户就可以访问您的GitHub账户,并能够部署您的包。

  2. 前往Packagist首页,并点击“提交包”按钮。

  3. 填写表单,输入GitHub仓库URL,然后点击“提交”按钮。

  4. 恭喜!您的包现在已在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

注意,建议遵循以下类图(尽管这不是必需的)

类图

Class Diagram

关键挑战

  • 将Guzzle/HTTP客户端添加到我们的包中
  • 确定如何处理API密钥
  • 如何在单个包中处理多个类
  • 如何处理错误处理