如何从 Laravel admin 迁移到 dcat admin - 小众知识

如何从 Laravel admin 迁移到 dcat admin

2024-03-26 03:44:51 苏内容
  标签: Laravel
阅读:1873

迁移步骤

最近发现挺多同学对项目如何从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
  • 2
  • 3
  • 4
  1. 安装完之后需要全局替换命名空间前缀,把Encore\Admin替换为Dcat\Admin
  2. 删除public/vendor目录文件,并且备份配置文件config/admin.php命名为config/admin.bak.php,最后重新发布资源
php artisan admin:publish --force
  • 1
  1. 最后修改配置文件config/admin.php,把你自定义过的参数重新写上
2.更改表结构

上面的安装步骤完了之后就可以调整表结构了,首先创建新的迁移文件

php artisan make:migration UpdateAdminTables
  • 1

然后打开,并写入以下内容

<?phpuse 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');
        });
    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

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

php artisan migrate
  • 1
3.修改bootstrap.php

然后需要打开app/Admin/bootstrap.php,如果其中有Grid、Form、Show等等的初始化操作、以及顶部导航栏设置的功能,都需要做点改动,具体请参考文档。

也可能会有其他方法不兼容,可以看一下编辑器是否有标黄提示。

4.控制器

1.关联模型使用调整,需要检查grid、form和show是否有使用关联模型,如果有的话需要进行以下改动

// 表格$grid = new Grid(Model::with([...]));// 表单$form = new Form(Model::with([...]));// 数据详情$show = new Show($id, Model::with([...]));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里可能会有很多同学会有疑问,为什么要显式的声明关联关系,像laravel-admin那样自动判断不好吗?其实这样设计也是有原因的,主要是为了解决下面这样的问题

return Form::make(Model::with('...'), function (Form $form) {
    // 主要是为了实现在这个闭包中能拿到模型数据的功能
	// 而这个功能需要在回调执行之前就把数据查询出来,所以无法做到自动判断关联模型
	if ($form->model()->username) {
	    ...
	} else {
	    ...
	}});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.grid表格的数据导出方法用法有所不同,需要查阅文档
3.form表单提交已经改成ajax提交,所以表单事件用法有所不同,需要查阅文档

5.模型

如果你使用的是laravel7,需要在你的模型中加上以下代码

use Dcat\Admin\Traits\HasDateTimeFormatter;class User extend Model{
    use HasDateTimeFormatter;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
6.自定义view

如果你在项目中使用了自定义view,并且在view里面写了js代码,则需要做以下处理

...<script>Dcat.ready(function () {
    // 把你的js代码放到这里面});</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
7.使用了action form

如果你使用了laravel-admin的弹窗表单功能,需要做点调整,具体使用可参考文档工具表单

结语

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

Dcat Admin

Dcat Admin是一个基于laravel-admin二次开发而成的后台系统构建工具,只需很少的代码即可快速构建出一个功能完善的高颜值后台系统。内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的HTML代码,对后端开发者非常友好。

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


扩展阅读
相关阅读
© CopyRight 2010-2021, PREDREAM.ORG, Inc.All Rights Reserved. 京ICP备13045924号-1