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

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

PHP小彩虹2020-12-23 16:22:3815870A+A-

迁移步骤

最近发现挺多同学对项目如何从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的弹窗表单功能,需要做点调整,具体使用可参考文档工具表单

结语

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



点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1

联系我们