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

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