[Laravel 8.x] 套件開發

近期在公司分享怎麼開發 Laravel 套件,就順便整理一下放上來。

一、介紹

首先要先想想這個套件需要什麼功能?再來要知道套件是怎麼載入的,最先執行的程式是什麼?有了基本觀念再來看程式比較容易理。

套件需要什麼功能?
例如:我們想要一個可以寫文章的功能,要有基本的 CRUD。

套件是怎麼載入的?
一般來說 Laravel 套件最先載入的程式是 ServiceProvider,其他需要用到的東西都在 ServiceProvider 載入。那 ServiceProvider 是怎麼被載入的呢?在 Laravel 4 以前是在 config/app.php 設定,Laravel 5 版之後可以在 composer.json 裡面找到。

二、建立新套件

我們來建立一個可以寫文章的套件。

1. 建立資料夾

cd packages
mkdir post

2. 建立 composer.json

進入 packages/post 資料夾,然後執行
composer init
composer 會透過一系列的問題來協助建立 composer.json 檔案。
建好之後,把他打開編輯一下。
{
    "name": "jenny/post",
    "autoload": {
        "psr-4": {
            "Jenny\\Post\\": "app/"
        }
    },
    "extra": {
        "laravel": {
            "providers": [
                "Jenny\\Post\\Providers\\PostServiceProvider"
            ]
        }
    }
}

3. 建立 ServiceProvider

對照 composer.json 裡面的路徑建立 ServiceProvider 檔案。
<?php

namespace Jenny\Post\Providers;

use Illuminate\Support\ServiceProvider;

class PostServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

4. require 套件

在主程式的 composer.json 加入 repository
"repositories": [
    {
        "type": "path",
        "url": "packages/post"
    }
]
然後執行
composer require jenny/post

三、開始寫程式

到這一步就可以開始依照需求和官方文件來開發,基本上就是需要什麼就加什麼,例如我需要 route 檔案,就參考文件在 ServiceProvider 的 boot function 加上
$this->loadRoutesFrom(__DIR__ . '/../routes/web.php');
需要 migration,就加上
$this->loadMigrationsFrom(__DIR__ . '/../database/migrations');
以此類推,如果真的遇到官方文件沒有的,也就只能靠經驗或 Google,我也沒有比較厲害的方式。

四、上傳 GitHub

如果套件想要開放給別人搜尋和安裝,可以上傳到 GitHub,然後到 Packagist 登記。

五、發布套件

Packagist 註冊登入,然後點右上角的「Submit」。
輸入套件的 GitHub 網址,點「Check」。成功之後會轉跳到套件詳情,這時候套件就可以被搜尋安裝囉!

留言