前言
之前看了超哥的教程,從頭到尾跟著做了一遍,當時也沒弄懂個所以然,就擱置了。時間一久,就全部都給忘完了。今天休息,就想著鞏固下在 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": {
"Lejin\\UnlimitedClassified\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Lejin\\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 協議》,轉載必須註明作者和本文連結