-
Notifications
You must be signed in to change notification settings - Fork 222
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
8 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
a7e95f0
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
关于webman插件系统的一些设计。
以下两个场景为例子
1、用户张三写了一个新的admin前端,想要替换调原来的默认admin
2、李四针对一些接口的插件写了限流和翻译的插件
关于插件的注册方式应当使用插件包内部提供的的一些reg方法,或者插件包读取config之后做出相应操作,这样隔离了插件包和开发项目之间的代码耦合。
最多让插件包可以触发在项目目录生成默认配置文件,其他的代码全都收敛到vendor内。
插件间的交互需要完善事件的触发和相关中间件的注册行为。
插件的注册方式可以使用 autoload.file 或者其他cache文件,这样之后插件的扩展会更一些。目前的copy不利于项目迭代升级和各种不同开发者插件的交互
a7e95f0
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
感谢你的建议。
插件分两种
一种是基础插件,一种是应用插件。
基础插件
类似通用的基础组件,作用于主项目,基础插件代码放置于vendor里,开发人员无需更改源码。
基础插件安装的时候可以选择是否在主项目config/plugin下插入配置,如果插入配置将介入主项目生命周期。
例如
{项目目录}/config/plugin
下加入中间件配置,则这个基础插件可以介入主项目请求周期,可以做到限流、翻译等。例如
{项目目录}/config/plugin
下加入bootstrap配置,则可以介入到webman的整个生命周期。例如
{项目目录}/config/plugin
下加入路由配置,则可以给主项目添加路由,当匹配某个路由的时候由中间件来处理。例如
{项目目录}/config/plugin
下加入进程配置,则可以产生自定义进程,自定义进程能做的事情就很多了,比如消息队列。还可以加入其它配置如redis,database等
基础插件一般不包含控制器,视图等页面逻辑,所以可以放置于vendor下,升级只需要更新vendor下的包即可。
应用插件
应用插件是一个比较完整的项目,例如商城、问答系统、CMS系统、admin后台等。
应用插件本身带控制器 视图 js css等,这些东开发者可能需要修改,无法放到vendor下。
另外后面会有开发者开发出付费的应用插件,付费应用插件不好直接用composer安装,所以不好放到vendor下。
应用插件统一放到
{项目目录}/plugin/
下。删除的时候只需要删除对应的目录即可。升级的话替换目录即可。应用插件和主项目一样,有自己独立的配置。应用插件不影响主项目。应用插件之间也互不影响。
主项目和应用插件以及插件和插件之间可以通过事件来通讯,达到解耦的目的。
主项目可以添加各种应用插件,像搭积木一样搭建真个项目。
需求实现
这个只需要开发一个应用插件,插件里实现前端部分就好了。
每个应用插件都有一个自己的地址,访问这个前端插件的地址例如 域名.com/app/xadmin 就可以了。
这个是基础插件,实际上是中间件,中间件里可以实现请求拦截和响应拦截,实现限流或翻译。
基础中间件使用composer安装,中间件逻辑会被安装在vendor下,安装时可以自动向
{项目目录}/config/plugin
里添加中间件配置,这样就可以介入到请求周期实现限流和翻译。如果想作用于某个应用插件,需要在对应应用插件中配置中间件。
关于插件代码存放位置
基础插件代码放置于vendor下没问题,但是应用插件还是放在
{项目目录}/plugin/
下好一些。