手把手教你开发composer扩展包,搭建thinkphp个人博客(一)
写在前面
由于最近需要用到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 文件:
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
You can exit with `CTRL-C`
Document root is: D:\tp6\public
访问 http://127.0.0.1:8000/ 没意外的话会输出成功页面
接下来就是安装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控制器里试试我们的包:
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了
可以看到已经提交成功了
现在可以在任意项目上执行此命令安装blog包了
composer require inn20/blog @dev
因为blog包composer.json文件不是稳定版本,也没有定义版本号。所以需要加上@dev来指定安装开发版,否则会安装失败。
本节源码
https://github.com/inn20/blog/tree/learn01
下一节将正式进入blog的开发,学习thinkphp的生命周期、容器、服务注册等。