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
  2. 安装完之后需要全局替换命名空间前缀,把Encore\Admin替换为Dcat\Admin
  3. 删除public/vendor目录文件,并且备份配置文件config/admin.php命名为config/admin.bak.php,然后重新发布资源
    php artisan admin:publish --force
  4. 最后修改配置文件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);
        });

        Schema::create(config('admin.database.permission_menu_table'), function (Blueprint $table) {
            $table->integer('permission_id');
            $table->integer('menu_id');
            $table->unique(['permission_id', 'menu_id']);
            $table->timestamps();
        });
    }

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

        Schema::dropIfExists(config('admin.database.permission_menu_table'));
    }
}

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

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代码,对后端开发者非常友好。

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


本作品采用《CC 协议》,转载必须注明作者和本文链接
Jiangqh
本帖由系统于 8个月前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 9

看了下 laravel-admin的扩展比较多。生态应该已经建成了

7个月前 评论
MArtian 7个月前
Jiangqh (楼主) 7个月前
hesper (作者) 7个月前
sunny123456 4个月前

大哥,2.0什么时候发布

7个月前 评论
Jiangqh (楼主) 7个月前
此时此刻 3个月前
Jiangqh (楼主) 3个月前
此时此刻 3个月前
此时此刻 3个月前

期待2.0版本。还有就是能多些扩展就好了

7个月前 评论
Jiangqh (楼主) 7个月前

兼容laravel-admin的拓展吗

7个月前 评论
Jiangqh (楼主) 7个月前
嘿喵财运旺旺 (作者) 7个月前
CraryPrimitiveMan 7个月前

插个眼

6个月前 评论

莫名的想参与了,怎么办

6个月前 评论
Jiangqh (楼主) 6个月前

怎么没有联动搜索的案例

6个月前 评论
Jiangqh (楼主) 6个月前

有没有多后台的支持

6个月前 评论
Jiangqh (楼主) 6个月前

支持大佬,刚用了一下,感觉不错,适合我这个vue都不会的人

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
12
粉丝
172
喜欢
483
收藏
342
排名:212
访问:2.1 万
私信
所有博文