Dcat Admin 教程 - 如何從 Laravel admin 遷移到 dcat admin?

Jiangqh發表於2020-05-08

遷移步驟

最近發現挺多同學對專案如何從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);
        });
    }

    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的彈窗表單功能,需要做點調整,具體使用可參考文件工具表單

結語

以上列出的只是主要的不同點,上面的步驟操作完成之後仍需要手動測試全部功能,然後如果有問題則對照文件進行調整。

Dcat Admin是一個基於laravel-admin二次開發而成的後臺系統構建工具,只需很少的程式碼即可快速構建出一個功能完善的高顏值後臺系統。內建豐富的後臺常用元件,開箱即用,讓開發者告別冗雜的HTML程式碼,對後端開發者非常友好。

線上演示站點 | LearnKu官方文件 | Github主頁(如果喜歡這個專案不妨點個star,感謝支援!)

本作品採用《CC 協議》,轉載必須註明作者和本文連結

Jiangqh

相關文章