使用 thinkphp
开发网站,在没有 thinkphp6
版本出来以前,常规的开发模式都是使用它自带的多应用开发方式来进行项目开发。
多应用开发的一个好处就是开发方便和快速,只需要在thinkphp规定的app目录建立一个目录,比如 admin 目录,然后在其内建立一个 controller 目录就可以开始一个项目的基本开发了。
然而这样开发只适合基于它本身的目录进行开发,如果想要把项目做成一个包来开发和发布,这样的方式明显不行。
而这次,thinkphp6
引入了 Service
的概念,增加了项目转移到包开发的可能性。
Service
的使用需要继承 \think\Service
,同时 Service
默认的 register
和 boot
这两个方法是非必须的,就是说可以不用添加也是可以的。
但是,我们使用 Service
就是为了在项目启动前添加自己的配置和注册一些自己的东西,所以这两个方法对项目开发来说,都利用起来是最好的方法。
register的使用
register
的加载要先于 boot
方法,也同时在系统里属于提前注册一些具体的配置及绑定类,所以在具体的项目开发中,也是推荐只做一些项目的配置。
Service
的引入会根据 thinkphp6
生成的 Services.php
缓存顺序进行加载,所以在使用过程中需要注意当前的 Service
在缓存中属于哪个位置,防止在注册配置时候出现配置加载时出现不可知的问题。
boot 的使用
boot
通常是在 register
注册完成后进行加载,boot
方法里推荐做一些对 register 注册完成后的信息的补充处理。
thinkphp6
由于在 boot
前已做了系统配置的初始化操作,所以在这里处理一些数据库操作也是没有问题的。
Service 的其他方法
loadRoutesFrom
:导入路由,传入数据为匿名函数
registerRoutes
:功能于 loadRoutesFrom 一样
commands
:导入脚本命令,传入数据为数组或者单个脚本
使用 Service 的场景
如果你想要把一个项目独立成一个包进行发布或者为 thinkphp6
提供扩展包。
如果只是单纯的想做一个 app
项目,Service
估计不太适合你。
最后,Service
的具体实践有没有什么好的项目推荐啊,那当然有的,这里隆重推荐一个完全使用 Service
开发的项目:
laket-admin
:https://github.com/deatil/laket-admin
laket-admin
使用 thinkphp6
的 Service
模式加单应用
开发而成,避开了 thinkphp6
多应用下 url
出现的一些问题,对用户端的 url
更加友好。