Laravel 学习扩展包的开发到发布

2,572 阅读3分钟

前言

之前看了超哥的教程,从头到尾跟着做了一遍,当时也没弄懂个所以然,就搁置了。时间一久,就全部都给忘完了。今天休息,就想着巩固下在 laravel 里开发扩展包和到最后的发布。这里就当做个笔记,也因为博客里一篇文章都没有,觉得甚是尴尬啊!废话不多说,咱要开始了。

目的

完成一个无限分类的小扩展包

安装 laravel

composer create-project --prefer-dist laravel/laravel pkg

也可以在已有的项目进行开发,如果这样则忽略安装这一步。

新建目录

接着进入此项目中,创建目录 packages/{your_name}/{your_package_name}

mkdir -p packages/everan/unlimitedclassified

然后再进入扩展包目录,进行 composer 初始化:

cd packages/everan/unlimitedclassified
composer init

按着提示来输入信息,得到的 comoposer 内容大概如下:

{
    "name": "everan/unlimitedclassified",
    "description": "This is a unlimited classified",
    "license": "MIT",
    "authors": [
        {
            "name": "Everan",
            "email": "everan@aliyun.com"
        }
    ],
    "require": {},
}

此时扩展包目录大致如下:

everan/unlimitedclassified
				├── src  # 逻辑代码文件夹
				├── tests # 测试用例文件夹
				├── README.md
				├── composer.json

修改 composer 配置

packages/everan/unlimitedclassified/composer.json

{
        ·
	·
	·
    "autoload": {
        "psr-4": {
            "Everan\\UnlimitedClassified\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Everan\\UnlimitedClassified\\Tests\\": "tests/"
        }
    },
	·
	·
	·
}

编写扩展包业务逻辑代码

<?php

namespace Everan\UnlimitedClassified;

class UnlimitedClassified
{
    public function getUnlimitedClassified($data, $parent_key, $child_key)
    {
        $data = array_column($data, null, 'id');
        $tree = [];
        foreach ($data as $key => $val) {
            if ($val[$parent_key] == 0) {
                $tree[] = &$data[$key];
            } else {
                $data[$val[$parent_key]][$child_key][] = &$data[$key];
            }
        }
        return $tree;
    }
}

编写服务类

<?php

namespace Everan\UnlimitedClassified;

use Illuminate\Support\ServiceProvider;

class UnlimitedClassifiedServiceProvider extends ServiceProvider
{
    public function boot()
    {
        //
    }

    public function register()
    {
        $this->app->singleton('unlimited_classified', function () {
            return new UnlimitedClassified();
        });
    }
}

到这里扩展包就基本算开发好了,接下来我们开始进行本地安装和测试。

本地测试

手动把服务类 UnlimitedClassifiedServiceProvider 添加到项目的 config/app.php providers 数组中:

'providers' => [
        ·
	·
	·
    \Everan\UnlimitedClassified\UnlimitedClassifiedServiceProvider::class,
],

接着修改根目录里的 composer 的配置 pkg/composer.json

"autoload": {
            ·
            ·
        "psr-4": {
            ·
            ·
            "Everan\\UnlimitedClassified\\": "packages/everan/unlimitedclassified/src/"
        }
    },

最后在根目录执行命令:

composer dump-autoload

测试

根目录执行:

php artisan tinker

接着输入代码:

$data = [
    ['id'=>1,'pid'=>0,'name'=>1],
    ['id'=>2,'pid'=>0,'name'=>2],
    ['id'=>3,'pid'=>1,'name'=>3],
    ['id'=>4,'pid'=>2,'name'=>4],
    ['id'=>5,'pid'=>3,'name'=>5],
    ['id'=>6,'pid'=>4,'name'=>6],
    ['id'=>7,'pid'=>5,'name'=>7],
    ['id'=>8,'pid'=>6,'name'=>8],
];

app('unlimited_classified')->getUnlimitedClassified($data, 'pid','child');

就能看到打印的无限分类的结果了。

扩张包的开发与发布 然后需要设置下,扩展包被其他朋友下载使用的时候能够实现自动添加服务,文档里有想尽的说明,我们的则做如下修改: packages/everan/unlimitedclassified/composer.json

	·
	·
"extra": {
	"laravel": {
		"providers": [
			"Everan\\UnlimitedClassified\\UnlimitedClassifiedServiceProvider"
		]
	}
}

至此,我们就完成了扩展包的开发和本地测试,接着讲一下发布。

扩展包发布

首先把扩展包发布到全球最火的也是最大的同性交流平台 GitHub 上,

从扩展包的开发到发布 接着再 Packagist 也发布:point_right: [packagist.org/]

从扩展包的开发到发布 然后点击 Check 按钮,再点击 Submit ,稍等片刻,等待提交...

从扩展包的开发到发布 到这里就已经可以了。

设置代码同步

回到我们挚爱的交友平台:GitHub,点击 Setting,如下:

从扩展包的开发到发布 先点击 Webhooks 再点右边的 Add webhooks,跳转界面如下:

从扩展包的开发到发布 红色框框里除了标了数字的要写之外,下面三个默认即可, 填写对应的内容:

  1. Payload URL: https://packagist.org/api/github?username=Packagist 的用户名
  2. Content type 选择为 application/json
  3. Secret 填写为下图复制的 token

从扩展包的开发到发布 到这里整个扩展包的开发到发布就基本前功尽弃了,噢,不好意思,是大功告成了。

补充

默认版本是 dev-master,Composer 包的版本号会从 Git 的 tag 中同步过来。

git tag v1.0.0
git push origin v1.0.0

最后

真的是不写不知道,写博客是真的累,不过写完是真的香啊!第一篇博客,有什么笔误的地方,欢迎指正。谢谢,(●'◡'●)! [Github]:point_right:github.com/Everan-1994… 注:暂时没写 test