学习扩展包的开发到发布
前言#
之前看了超哥的教程,从头到尾跟着做了一遍,当时也没弄懂个所以然,就搁置了。时间一久,就全部都给忘完了。今天休息,就想着巩固下在 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
也发布 [https://packagist.org/]
然后点击 Check
按钮,再点击 Submit
,稍等片刻,等待提交…
到这里就已经可以了。
设置代码同步#
回到我们挚爱的交友平台:GitHub
,点击 Setting
,如下:
先点击 Webhooks
再点右边的 Add webhooks
,跳转界面如下:
红色框框里除了标了数字的要写之外,下面三个默认即可,
填写对应的内容:
- Payload URL:
https://packagist.org/api/github?username=Packagist 的用户名
- Content type 选择为
application/json
- Secret 填写为下图复制的 token
到这里整个扩展包的开发到发布就基本前功尽弃了,噢,不好意思,是大功告成了。
补充#
默认版本是 dev-master
,Composer 包的版本号会从 Git 的 tag 中同步过来。
git tag v1.0.0
git push origin v1.0.0
最后#
真的是不写不知道,写博客是真的累,不过写完是真的香啊!第一篇博客,有什么笔误的地方,欢迎指正。谢谢,(●’◡’●)!
[Github]https://github.com/Everan-1994/unlimited-c...
注:暂时没写 test
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: