模組化 套件 開發自己的Package

因為幾年的接案開發經驗,了解過許多客戶的需求後發現其實有多數人都擁有相同的基本需求

舉例來說,這幾年大大小小的案子做下來都不知道已經寫過幾次的討論區,寫過幾次的最新消息,寫過幾次的會員系統了

這些開發過的專案中大約有八成的內容都差不多,那為何每次都需要重新做呢?

因此才有了這次想要把一些基本常用功能模組化的想法

然侯在以前沒接觸過framework開發的時候,所謂模組化也僅僅是把class獨立出來寫好,以後可以繼續拿來用

但是被改了哪寫東西,版本經過多少人修改根本都無法追蹤,現在透過Composer 幾乎可以專心在自己的邏輯處理了,剩下的版本問題就叫給Composer

前面幾篇文章已經介紹過如何來使用Composer,如果你還沒看過請先查看

Composer 幫PHP套件找一個家

用Laravel 來建立你的第一個網站

接下來的內容會帶大家透過Composer來製作一個Hello Laravel套件,僅作示範內容只有Hello

參考文件 :

http://oomusou.io/laravel/laravel-package-hello-world/

https://medium.com/back-ends/laravel-5-%E6%92%B0%E5%AF%AB%E4%BD%A0%E7%9A%84package-458c93c279bc

 

步驟一 :先說明邏輯概念

本篇範例會先建立一個主要的Larvel Project,作為管理和開發套件的專案,我會把之後所有要開發的套件全部都放在這個Project的packages資料夾底下

 

步驟二 : 建立主要Project

我們先建立一個用來管理開發套件的主要Porject,名叫MyPackage

接著建立”packages”目錄,之後會把所有開發的套件資料全部放在這裡,套件資料夾的結構會長的像這樣 packages/vendor_name/package_name/src

建立完成之後內容大概會像這樣子,範例使用virtualorz/hello/src

模組化 package 開發結構

 

步驟三 :建立composer.json

每一個套件都需要建立自己的composer.json,用來描述相依性以及namespace,先切換到hello資料夾然後透過composer指令來建立composer.json

接著按照提示填入package name等等的資訊

系統會產生一個composer.json檔,像這樣子

composer init

 

步驟四 :設定PSR-4命名空間

我們必須回到上述管理package的project根目錄將剛剛建立好的package加入到composer.json中,讓他可以在這個project中運行

請注意PSR-4大小寫的問題

接著回到MyProject根目錄來產生新的autoload檔案

 

步驟五 :建立ServiceProvider

接下來要建立HelloServiceProvidor.php,套件與專案Project會透過ServiceProvider連結起來

這時候會在MyPackage/app/providers中建立好HelloServiceProvider.php 但是因為我們是要套件中使用

所以必須要將這個檔案移動到 MyPackage/packages/virtualorz/hello/src 底下,也因為移動了所以必須要修改namespace

大概會像下面這樣子

接著在config/app.php 中註冊HelloServiceProvidor

 

步驟六 :建立Cntroller

一樣可以透過指令的方式建立Controller,相同的建立完成之後我們會將Controller移動到 MyPackage/packages/virtualorz/hello/src 底下

同樣的也必須要修改namespace,也因為extend Controller的關係,所以必須將App\Http\Controllers\Controller 拿進來用

 

步驟七 :建立Route

Route可以根據不同的狀況來建立所需要的存取路徑,本次範例在 MyPackage/virtualorz/hello/src 底下建立routes.php,填入以下路徑

 

步驟八 :建立View

本次範例也不特別建立view,僅拿現成的welcome頁面來使用,我們將resources/views/welcome.blade.php 複製到 package/virtualorz/hello/src/views

並且小修一下內容用來顯示controller中的message

 

步驟九 :修改ServiceProvider

最後我們還要修改一下SeviceProvidor檔案,讓系統可以知道從哪邊將view讀進來

 

步驟十 :測試package是否可行

打開瀏覽器,輸入MyPackage所在的網址後面夾入/hello,本次的範例是這樣子的

如果有看到這樣的畫面就是正確的,我們把message字串接在Laravel後面

 

步驟十一 :上傳到github並提交是packagist

因為之後提交到packagist後使用者可以自行下載,當然不能讓使用者自行修改PSR-4才能使用,因此我們將hello 資料夾中的composer.json修改一下

接著在hello 資料夾下建立git,並且push到遠端github上

請一定要記得下tag,並且在之後所有push的版本都加上tag,這樣packagist才有依據要抓哪一個版本的程式碼給使用者

最後記得提交到Packagist上就可以啦

 

注意事項 :在開發過程中如果要變更版本號碼請記得砍掉composer.lock,讓系統重新抓composer.json中定義的版本號碼,這樣才會重新下載新的

 

首頁 » 技術文章 » Laravel » 模組化 套件 開發自己的Package