Composer Package 套件開發第三篇

先前已經紀錄過兩篇關於模組開發的文章,如果你還沒看過這兩篇請先閱讀

模組化 套件 開發自己的Package

模組化 開發自己的package 進階版

本篇會從頭再帶一次整個開發流程,以及更多的使用方式,包含publish migration以及view的用法

1.建立開發測試用的專案

這個專案目的在於透過laravel本身直接執行package程式碼,確認package本身沒有問題

建立一個名為packageDev的Laravel專案來使用

接著建立”packages”資料夾,作為開發套件的根目錄

2.建立套件資料夾

接著將套件使用的資料夾建立起來後,資料夾結構會長這個樣子

接著建立起src/Facades資料夾以及package_name.php 檔案,讓套件method可以使用static的方式來呼叫使用

用一個範例來看,packages資料夾底下結構會是這個樣子

composer package
composer package

假設在sitemap套件底下,你會一個Sitemap.php作為主要邏輯檔案,一個SitemapServiceProvider.php註冊為service provider使用

以及Facades資料夾底下的SItemap.php

3.建立套件的composer.json檔

以上方範例來說

切換到packageDev/packages/virtualorz/sitemap資料夾後透過以下指令建立composer.json

這個指令會帶你幾個步驟將資料填寫完畢即可,最主要依定要填入name, author

接著請編輯這個composer.json檔案,加入autoload的psr-4描述,讓這個package可以被載入

以上方的範例來說,編輯完過後的composer.json會長這個樣子

接著,如果你有其他必須要依賴使用的套件請編輯”require”區域,舉例像是底下的範例就需要依賴使用 actionLogin 0.0.8版本以上以及sitemap0.0.3版本以上

接著,必須要回到packageDev根目錄中更新autoload

4.建立以及編輯套件的serviceProvider檔

建立好serviceProvider需要將檔案從packageDerv/app/providers底下移動到packageDev/packages/virtualorz/src 底下

然後編輯一下namespace,以及register的部分,大概會像這個樣子

composer package
composer package

其中,register的部分註冊讓package method可以透過facades資料夾中定義好的方式靜態呼叫

5.編輯Facades/package_name.php

以上面的範例來看,Facades/Sitemap.php會長這個樣子

6.註冊serviceProvider以及aliases

以上面的範例,需要在packageDev/config/app.php 中註冊以下資料

將套件sitemp帶入到packageDev專案中使用

現在,你就可以跟在github上面看到的套件一樣在controller中呼叫你的package method了

像是這個Stitemap套件,就可以在packageDev專案中這樣子使用

7.如果需要將套件中設定檔或者其他JS檔複製到專案資料夾中使用,可以這樣做

舉例來說,permission套件中需要將src/asset以及src/config打下的檔案複製到pacakageDev底下使用

資料夾結構會是這樣子

composer package
composer package

可以在permissionServiceProder.php中的boot() 寫入以下資訊,就可以將asset中所有檔案複製到packageDev中的config資料夾

以及將config資料夾中的檔案複製到packageDev中的public/vender/treeView

8.如果需要用到vview以及route,也可以這麼做

舉例來說fileupload套件中會有自己定義好的route讓專案執行某個路徑就可以處理檔案上傳的資料

以及在fileupload套件中也會有個method透過view將html產生回傳給controller

因此我們可以這樣定義資料結構

composer package
composer package

src/routes.php是定義上傳檔案所需要用到的url,會長這個樣子

而view/uploadArea.blade.php,就是預先定義好拿來產生html的blade file

接著需要在FileuploadServiceProvider.php中定義

其中loadViewsFrom 是讓系統知道可以從那邊存取view blade

loadRoutesFrom是讓系統知道可以從哪邊存取route檔案

所以這時候在如果存取 http://package_url//virtualorz/upload 就可以使用package中定義好的 ‘Virtualorz\Fileupload\Fileupload@index’

9.如果你需要定義資料表來存取資料,你可以這麼做

舉例來說,aactionLog套件需要建立一張’system_log’資料表來儲存記錄訊息

所以我們先建立system_log migration

接著把檔案從 packageDev/database/migrations/ 搬移到 packageDev/packages/virtualorz/actionLog/migrations中

接著編輯好migrate檔案後,在ActionLogServiceProvider中註冊

其中,loadMigrationsFrom讓系統知道可以從哪邊讀取migrate檔案,這麼一來執行

php artisan migration時就會將這個指定的路徑納入

10.最後,請記得編輯readme.md

readme.md是整個套件使用的入門,readme.md檔是markdown語法構成的,不熟悉markdown可以參考

https://markdown.tw/

回到套件根目錄後透過touch readme.md 可以建立空的檔案,然後直接使用編輯器編寫即可

接下來的步驟就是將git push到github上,以及設定好tag version,然後submit到packagist上就可以透過composer找到你的套件了

步驟不多,也就不再詳述可以直接參考 模組化 套件 開發自己的Package

以上範例皆存在gihub上,可以自由參考

fileupload

sitemap

actionLog

permission