手把手教你開發 Composer 擴充套件包,搭建 ThinkPHP 個人部落格(一)

Inn發表於2020-06-14

我的部落格

文章出自 Inn的部落格www.gog5.cn/archives/5/
第一次開通部落格,歡迎小夥伴們點贊、交換友情連結

寫在前面

由於最近需要用到thinkphp6開發,之前也是處於瞭解階段,藉此機會來學習一些框架的知識,這也算是我學習擴充套件包開發的筆記吧。
本系列文章將從零開始一步一步構建thinkphp的部落格擴充套件包。

概覽

  • composer從建立到釋出到Packagist
  • 使用服務提供者註冊部落格核心
  • 用資料庫遷移工具控制資料表結構
  • 命令列安裝指令
  • 使用中介軟體做後臺使用者認證
  • RESTful API 路由設計
  • 崇尚 「DRY(Don’t repeat yourself)不要重複自己」

初始化專案

本地新建 blog 資料夾,作為擴充套件的根目錄
進入目錄,執行:
composer init

基本上一直按回車就可以了
完成後,根目錄會生成一個composer.json檔案

裡面是這樣的:
{
    "name": "inn20/blog",
    "authors": [
        {
            "name": "inn20",
            "email": "dyg0924@sina.cn"
        }
    ],
    "require": {}
}

name 是擴充套件包名稱,一般是<使用者>/<包名字>,例如inn20/blog
require 是專案的專案的依賴關係,後面會具體講到

規定應用的名稱空間

現在將composer.json修改成

{
    "name": "inn20/blog",
    "authors": [
        {
            "name": "inn20",
            "email": "dyg0924@sina.cn"
        }
    ],
    "require": {},
    "autoload": {
        "psr-4": {
            "Inn20\\Blog\\": "src/"
        }
    }
}

其中"Inn20\\Blog\\": "src/" 代表名稱空間 Inn20\Blog 對應的程式碼目錄在 src下。這樣下來,基本的composer包定義就完成了。

新建src目錄,並在裡面新建 Demo.php 檔案:

<?php

namespace Inn20\Blog;//這裡和composer.json裡名稱空間對應

class Demo {

    public static function sayHello()
    {
        return 'Good morning';
    }

}

到這裡我們的擴充套件包已經開發完成了。

安裝Composer包

因為後面要用到,所以建議直接安裝一個thinkphp來測試。

新建 tp6 目錄,進入目錄執行:

composer create-project topthink/think ./
php think run

會輸出:

ThinkPHP Development server is started On <http://127.0.0.1:8000/>
You can exit with `CTRL-C`
Document root is: D:\tp6\public

訪問 http://127.0.0.1:8000/ 沒意外的話會輸出成功頁面
image

接下來就是安裝composer包了,因為我們現在是在本地,還沒釋出到Packagist,需要做一點手腳。
開啟工具人tp6的composer.json檔案,加入:

{
    ...
    "repositories": {
        "local": {
            "type": "path",
            "url": "d:/blog"
        }
    }
}

當我們下次執行 Composer 時,就會同時從 Packagist 和給定的路徑查詢依賴的資源。並且路徑形式的倉庫優先順序高於 Packagist。

接下來安裝我們的composer包:

composer require inn20/blog @dev

完美,可以看到vender目錄下多了一個軟連線 tp6\vendor\inn20\blog,指向到d:/blog,這就是我們的包原始碼,現在已經安裝成功了。

進入工具人tp6\app\controller\Index.php控制器裡試試我們的包:

<?php
namespace app\controller;

use app\BaseController;
use Inn20\Blog\Demo;

class Index extends BaseController
{
    public function index()
    {
        return Demo::sayHello();
    }
}

訪問http://127.0.0.1:8000/index/index 輸出:

Good morning

就是這麼簡單。

釋出到Packagist

現在有個問題,如果別人也想用這個composer包,要把程式碼複製過來,重新配置才能用,那得多麻煩啊。這時候我們就可以把包釋出到Packagist了,後面只需要一行程式碼就可以完成安裝。

首先把blog程式碼上傳到GitHub
https://github.com/inn20/blog

建議github倉庫名和composer包名一致,不容易混淆

訪問https://packagist.org/,註冊一個賬號
登陸後點選右上角的Submit,填寫GitHub連結Check就ok了
image

可以看到已經提交成功了

image

現在可以在任意專案上執行此命令安裝blog包了

composer require inn20/blog @dev

因為blog包composer.json檔案不是穩定版本,也沒有定義版本號。所以需要加上@dev來指定安裝開發版,否則會安裝失敗。

本節原始碼

https://github.com/inn20/blog/tree/learn01

下一節將正式進入blog的開發,學習thinkphp的生命週期、容器、服務註冊等。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章