FastAdmin 是一款基于 ThinkPHP 和 Bootstrap 的极速后台开发框架,基于 Auth 验证的权限管理系统,一键生成 CRUD,自动生成控制器、模型、视图、JS、语言包、菜单、回收站 。我们知道Fastadmin是一个优秀的开源框架。除了各种好用的实际功能外,官方还不遗余力地维护和更新该框架。显然,即使我们没有尝试体验更多的功能,为了安全起见,我们也应该及时升级和更新我们基于fastadmin的项目。

下面是本人工作中遇到的安全问题,必须要更新fastadmin框架,就此介绍如何对fastadmin项目进行升级。

1.环境介绍

首先介绍下我的项目情况:

1) fastadmin版本比较古老:2018年

你的版本是:1.0.0.20180911_beta,新版本:1.2.1.20210730_beta

2) 版本控制器用的是git。

2.整体更新思路

1) 在码云、coding等代码托管平台上fork 下 Fastadmin仓库

2) 把转移到git的代码拉下本地,同时关联fork 后的fastadmin远程仓库地址

3) 拉取fork后的fastadmin代码到本地,然后强制合并。

4) 更新bower 和 composer依赖

5) 同步数据结构

6) 完成,并提交代码

3.需要准备工具

1) git客户端

1) bower 客户端,用于更新fastadmin前端依赖。

1) composer 客户端,用于更新fastadmin 的composer依赖

1) phpstorm (非必须),处理冲突文件的界面很友好,推荐使用。

1) Navicat (非必须),在本文中用于处理数据结构同步。

4.fork官方仓库

  1. 由于官方Fastadmin使用的是码云gitee,我们得在gitee 注册一个账号,然后在fastadmin仓库 点击 “fork”。
  2. 当把项目迁移到git后,把代码clone到本地,使用命令行切换到项目根目录,通过:git remote -v 命令查看本地代码关联的远程仓库情况。
  3. 发现目前只有一个origin 远程仓库,这个是我们自己项目的远程仓库。然后还需要再增加一个远程仓库,也就是刚刚fork的fastadmin仓库。
  4. 复制地址后,使用命令git remote add fastadmin + "你自己的fork下来的fastadmin 地址" 增加fastadmin远程仓库, 例如我的:git remote add fastadmin git@gitee.com:aijiyenan/fastadmin.git
  5. 添加完fork地址后,我们再通过git remote -v 查看远程仓库情况,这时多出了fastadmin,这就是等下同步代码的关键:

5.合并仓库

  1. 通过:git fetch fastadmin 命令,把远程仓库fastadmin拉下本地:
  2. 现在我们本地就有了origin 和 fasdadmin 两个仓库的代码,然后要做的就是把fasdadmin合并到origin。命令:git merge fastadmin/master --allow-unrelated-histories。PS:这是因为git认为这是两个不相关的项目,我们得在命令后面加上参数: --allow-unrelated-histories ,进行强制合并。
  3. 注意:如果遇到下面提示Automatic merge failed; fix conflicts and then commit the result.,不要惊慌。这是因为合并过程中有冲突文件,版本相差越大,冲突的文件就可能越多,我们只要解决有冲突的文件即可。
  4. OK,此时合并成功,但是发现新增了不少文件,同时也有不少文件有冲突。接下来就是最辛苦的环节了,解决冲突!但是不要怕,在phpstorm里解决冲突很友好。选择跟目录,右键:Git-->Resolve Conflicts
  5. 啪啪啪,出现一堆冲突文件,但是不要怕,很多都是我们没改过的文件,所以,可以把确定我们没有动过的文件,多选后,选择右边的“Accept Theirs”接受fastadmin的文件,替换本地文件。反之如果以本地文件为准,则选择“Accept Yours”,如果遇到不确定的,就得选择 “Merge”,或者双击文件进行修改了
  6. 这是选择手动修改的界面以及说明:

6.更新依赖

  1. 首先把/public/assets/libs 目录下的文件都删了
  2. 确保项目根目录里的.bowerrc 和 bower.json 是最新同步的
  3. 回到项目根目录,执行前端依赖安装命令:bower install,这样就可以把所有前端重装一遍。
  4. 更新composer插件(如果没composer,得安装,并且设置源为中国镜像,教程在composer官网上有),命令:composer update
  5. 至此,代码部分已经全部同步完成。剩下就的是比对数据库结构是否有改动,然后同步结构。

7.同步数据库

更新数据库同样需要细心,目前有两个比较好的方法:
  1. 通过安装一个新的fastadmin项目,目的是拿到这个新项目的数据库,然后通过navicat等数据库工具与你的项目数据库进行比对同步(注意:这个新生成的数据库前缀要和你项目的一样)
  2. 通过git版本对比fastadmin.sql文件,找到差异化的地方,然后再手动修改你项目的数据库。
本文演示第二种方法,也就是通过git对比fastadmin.sql:
  1. 在phpstrom里找到 /application/command/Install/fastadmin.sql文件,右键进行版本对比:
  2. 找到其中有差异的地方,再手动修改对应结构和数据。例如下图,通过对比,我们发现新增了fa_version表,这时我们复制表结构sql(记得把前缀改成你项目的前缀),放到数据库运行生成即可。

8.总结&注意

Q:如果往后有更新,需要同步怎么办?

A:不用怕,由于本地项目已经和远程的fastadmin仓库关联,操作就不必这么复杂了。只要先到码云上,先把你的fork的fastadmin仓库与官方仓库进行同步,然后在本地依次,git fetch fastadmin,git merge fastadmin/master 既可以。由于版本的更新,对应的配置可能会有增减。所以特别注意config.php等文件的合并。更新完后,如果有错误,需要耐心调试