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
本帖由系统于 3年前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 27

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

3年前 评论
MArtian 3年前
Jiangqh (楼主) 3年前
hesper (作者) 3年前
sunny123456 3年前

大哥,2.0什么时候发布

3年前 评论
Jiangqh (楼主) 3年前
此时此刻 3年前
Jiangqh (楼主) 3年前
此时此刻 3年前
此时此刻 3年前

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

3年前 评论
Jiangqh (楼主) 3年前

兼容laravel-admin的拓展吗

3年前 评论
Jiangqh (楼主) 3年前
臭鼬 (作者) 3年前
CraryPrimitiveMan 3年前

莫名的想参与了,怎么办

3年前 评论
Jiangqh (楼主) 3年前

怎么没有联动搜索的案例

3年前 评论
Jiangqh (楼主) 3年前

有没有多后台的支持

3年前 评论
Jiangqh (楼主) 3年前

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

3年前 评论

mark,后面用到

1年前 评论

我在通过laravel-admin切换成dcat admin之后,登录一直提醒“csrf token mismatch”,本地环境用的是docker wsl2 sail。是不是哪里没有清除干净。

7个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
13
粉丝
302
喜欢
572
收藏
462
排名:170
访问:5.7 万
私信
所有博文
社区赞助商