Dcat Admin 教程 - 如何从 Laravel admin 迁移到 dcat admin?

迁移步骤

最近发现挺多同学对项目如何从 laravel-admin 迁移到 dcat-admin 有疑问,所以下面为大家讲解一下迁移的实操步骤,其实两者用法基本大同小异,需要改动的代码会很少。

大家也可以在这里反馈迁移中遇到的问题,我有时间会一一帮助大家解决。

1.新建一个代码分支

这个步骤不用多解释,大家都明白。如果你用的版本管理软件不是 git ,也可以把你的代码复制出来作为一个新项目。

2.安装dcat-admin

  1. 需要先卸载 encore/laravel-admin ,并且卸载一切 laravel-admin 的相关插件,然后安装 dcat/laravel-admin ,推荐安装最新版本
// 先卸载laravel-admin的所有相关插件
// 然后运行
composer remove encore/laravel-admin
composer require dcat/laravel-admin
  1. 安装完之后需要全局替换命名空间前缀,把 Encore\Admin 替换为 Dcat\Admin
  2. 删除 public/vendor 目录文件,并且备份配置文件 config/admin.php 命名为 config/admin.bak.php ,然后重新发布资源
php artisan admin:publish --force
  1. 最后修改配置文件 config/admin.php ,把你自定义过的参数重新写上

2.更改表结构

上面的安装步骤完了之后就可以调整表结构了,首先创建新的迁移文件

php artisan make:migration UpdateAdminTables

然后打开,并写入以下内容

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class UpdateAdminTables extends Migration
{
    public function getConnection()
    {
        return config('admin.database.connection') ?: config('database.default');
    }

    public function up()
    {
        Schema::table(config('admin.database.permissions_table'), function (Blueprint $table) {
            $table->integer('parent_id')->default(0);
            $table->integer('order')->default(0);
        });
    }

    public function down()
    {
        Schema::table(config('admin.database.permissions_table'), function (Blueprint $table) {
            $table->dropColumn('parent_id');
            $table->dropColumn('order');
        });
    }
}

最后运行以下命令更改表结构

php artisan migrate

3.修改bootstrap.php

然后需要打开 app/Admin/bootstrap.php ,如果其中有 GridFormShow 等等的初始化操作、以及顶部导航栏设置的功能,都需要做点改动,具体请参考文档。

也可能会有其他方法不兼容,可以看一下编辑器是否有标黄提示。

4.控制器

1.关联模型使用调整,需要检查 gridformshow 是否有使用关联模型,如果有的话需要进行以下改动

// 表格
$grid = new Grid(Model::with([...]));
// 表单
$form = new Form(Model::with([...]));
// 数据详情
$show = new Show($id, Model::with([...]));

这里可能会有很多同学会有疑问,为什么要显式的声明关联关系,像 laravel-admin 那样自动判断不好吗?其实这样设计也是有原因的,主要是为了解决下面这样的问题

return Form::make(Model::with('...'), function (Form $form) {
    // 主要是为了实现在这个闭包中能拿到模型数据的功能
    // 而这个功能需要在回调执行之前就把数据查询出来,所以无法做到自动判断关联模型
    if ($form->model()->username) {
        ...
    } else {
        ...
    }
});

2. grid 表格的数据导出方法用法有所不同,需要查阅文档

3. form 表单提交已经改成 ajax 提交,所以表单事件用法有所不同,需要查阅文档

5.模型

如果你使用的是 laravel7 ,需要在你的模型中加上以下代码

use Dcat\Admin\Traits\HasDateTimeFormatter;

class User extend Model
{
    use HasDateTimeFormatter;
}

6.自定义view

如果你在项目中使用了自定义 view ,并且在 view 里面写了 js 代码,则需要做以下处理

...
<script>
Dcat.ready(function () {
    // 把你的js代码放到这里面
});
</script>

7.使用了action form

如果你使用了 laravel-admin 的弹窗表单功能,需要做点调整,具体使用可参考文档 工具表单

结语

以上列出的只是主要的不同点,上面的步骤操作完成之后仍需要手动测试全部功能,然后如果有问题则对照文档进行调整。

Dcat Admin

Dcat Admin 是一个基于 laravel-admin 二次开发而成的后台系统构建工具,只需很少的代码即可快速构建出一个功能完善的高颜值后台系统。内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的HTML代码,对后端开发者非常友好。

在线演示站点 | 官方文档 | Github主页 (如果喜欢这个项目不妨点个star,感谢支持!)

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章