写在前面

由于最近需要用到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的生命周期、容器、服务注册等。

Last modification:July 13th, 2020 at 11:47 pm
如果觉得我的文章对你有用,请随意赞赏