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

本帖由系统于 2个月前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 8

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

2个月前 评论
MArtian 1个月前
Jiangqh (楼主) 2个月前
hesper (作者) 2个月前

大哥,2.0什么时候发布

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

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

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

兼容laravel-admin的拓展吗

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

插个眼

1个月前 评论

莫名的想参与了,怎么办

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

怎么没有联动搜索的案例

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

有没有多后台的支持

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

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!