在使用过Laravel
框架和Tp5
框架后,都会知道Composer
这个东西。使用这个对项目进行管理真的很方便。而且现代化的框架都应该支持Composer
操作,因为支持Composer
后你就能够使用更多的扩展包。框架的可扩展性也更加强大。
重构之前框架的思路
为了将框架进行Composer
支持,这里首先要思考的是,怎么去拆分出来做的问题。首先要将Rice
(我的框架名字)的核心代码库抽离出来,在github
上单独一个项目。项目地址:rice/framework。将Rice核心库抽离出来后,我们就能够将它从 项目地址:rice/rice这里使用Composer
将核心库载入进来,而且这里面要将之前的核心库中的Loader
类去掉,统一使用Composer
的classLoader
类来加载。
开干
思路明确后我们就开始重构项目了。
首先将核心代码库独立出来
这里面的github
创建一个新的仓库就不具体介绍了,小白可以百度一下。
这个是框架结构项目,用来载入核心库的。这里面与之前的项目不同在于统一将模块放在App
文件夹下面进行模块编写,这里你可能会有疑惑会这么写?这样写的原因是composer.json
文件中我要将自动加载的文件路径定义出来,根目录是不可能使用的,所以我只好定义一个App文件夹统一存放。之前的核心库也删除了,之后核心库要通过composer install
引入进来。
然后我们来讲一下composer.json
的使用方法
Rice - composer.json:
{
"name": "rice/rice",
"description": "rice",
"type": "project",
"license": "MIT",
"authors": [
{
"name": "DMF",
"email": "1015814408@qq.com"
}
],
"minimum-stability": "dev",
"require": {
"rice/framework" : "~1.0"
},
"autoload": {
"psr-4": {
"App\\": "App/"
}
}
}
这个项目文件是使用composer init
来生成的,然后这里面自己写的是require
和autoload
。
-
require
要加载的扩展包,这里面我的是rice/framework
这个composer
包。这里你可能会存在疑惑,为什么与github
的项目名称不一致的呢?其实composer下来的包都不是存放在github
上面的,而是这个网站packagist。所以这里要以这个的命名为主。不会如何使用github
来关联packgist
的话,可以看一下这篇文章。如何建立自己的composer包 -
autoload
这个autoload是重头戏,因为composer包的文件加载都要靠它来实现。这里面有psr-4
,psr-0
,classmap
,files
这四个参数可选。然后我这里面要使用到的是psr-4
和files
。
psr-4是用来定义根据命名空间自动加载类文件的规则,所以在这里定义一个路径就能够使他们能够加载进来。
files是用来加载文件的,例如使用一些辅助函数就可以直接写文件路径进来。
Rice改进
- 代码格式统一采用
psr-2
格式 - 项目模块目录统一定义在
App
文件夹 - 删除自定义的文件加载
Loader
类,统一采用Composer
自带加载 - 修改
Dispatcher
类中采用全局变量定义module
,controller
,action
等变量。 - 异常统一处理
- 添加请求和返回的
psr
规范 - 统一容器管理
- 日志系统
注意细节
- 命名空间采用反斜杠
\
,文件加载斜杆/
- 使用
git tag v0.0.0
来发布扩展包