[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,我也沒有比較厲害的方式。
留言
張貼留言