[Laravel 8.x] 套件開發
近期在公司分享怎麼開發 Laravel 套件,就順便整理一下放上來。
套件需要什麼功能?
例如:我們想要一個可以寫文章的功能,要有基本的 CRUD。
套件是怎麼載入的?
一般來說 Laravel 套件最先載入的程式是 ServiceProvider,其他需要用到的東西都在 ServiceProvider 載入。那 ServiceProvider 是怎麼被載入的呢?在 Laravel 4 以前是在 config/app.php 設定,Laravel 5 版之後可以在 composer.json 裡面找到。
一、介紹
首先要先想想這個套件需要什麼功能?再來要知道套件是怎麼載入的,最先執行的程式是什麼?有了基本觀念再來看程式比較容易理。套件需要什麼功能?
例如:我們想要一個可以寫文章的功能,要有基本的 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 initcomposer 會透過一系列的問題來協助建立 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,我也沒有比較厲害的方式。



留言
張貼留言