laravel-admin 按模組拆分後臺業務元件 laravel-admin-modules

鹹鴨蛋發表於2020-09-11

第一次在社群寫文章,有不足和錯誤之處,請大家請及時指出?

場景

laravel-admin 是一個可以快速幫你構建後臺管理的工具,它提供的頁面元件和表單元素等功能,能幫助你使用很少的程式碼就實現功能完善的後臺管理功能。但是當後臺功能不斷迭代,導致原本的 Admin 目錄過於龐大,不同功能模組之間如果使用相同的 Model 會導致出現一些不必要的 bug(比如訪問器、修改器等對欄位的修改,導致不同模組之間資料不一致),基於以上問題,利用學習《LX2 PHP 擴充套件包實戰教程 - 從入門到釋出》期間寫了 an5dy/laravel-admin-modules 這個 laravel-admin 擴充套件包,能夠實現簡單地基於業務對後臺進行模組拆分。

需求環境

  • PHP >= 7.0.0
  • laravel-admin >= 1.6

安裝

composer require an5dy/laravel-admin-modules --dev -vvv

? 建議安裝在 dev 下,正式線不需要安裝。

使用

首先新建一個模組

php admin:module:make {name}
  • name:模組名
模組初始目錄結構
app/{模組名}
├── Controllers
├── Models
├── Providers
│   └── {模組名}ServiceProvider.php
└── routes.php
  • app/{模組名}:目錄用於存放相關模組檔案。
  • app/{模組名}/Controllers:目錄用於存放模組控制器檔案。
  • app/{模組名}/Models:目錄用於存放模組模型檔案。
  • app/{模組名}/Providers:目錄用於存放模組服務提供者檔案,{模組名}ServiceProvider.php 檔案是當前模組的 laravel 服務提供者類,用於載入模組路由等功能,需手動註冊到 config/app.php 配置檔案中。
  • app/{模組名}/routes.php:檔案用於配置模組路由。

建立指定模組控制器類

php artisan admin:module:controller {module} {model} {--title=} {--stub= : Path to the custom stub file. } {--output}
  • module:需建立控制器的模組名。
  • model:當前模組 Models 目錄下的模型名,可通過以下命令來生成。

    php artisan make:model App\{模組名}\Models\{模型名}

  • 其它引數與 laravel-admin 建立控制器 admin:make 一致。

建立指定模組表單請求類

php artisan admin:module:request {module} {name}
  • module:需建立表單請求類的模組名。
  • name:表單請求類名稱。

建立指定模組服務提供者類

php artisan admin:module:provider {module} {name}
  • module:需建立服務提供者類的模組名。
  • name:服務提供者類名稱。

建立指定模組 bootstrap.php 配置檔案

php artisan admin:module:bootstrap {module}
  • module:需建立 bootstrap.php 的模組名。
以上命令執行後的模組目錄結構
app/{模組名}
├── Controllers
├── Middleware
│   └── ModuleBootstrap.php
├── Models
├── Providers
│   └── {模組名}ServiceProvider.php
├── bootstrap.php
└── routes.php
  • app/{模組名}/Middleware/ModuleBootstrap.php:當前模組的 bootstrap.php 檔案過載中介軟體,需配置在 {模組名}ServiceProvider.php 中,具體程式碼如下所示。

    <?php
    use App\{模組名}\Middleware\ModuleBootstrap;
          .
          .
          .
    class {模組名}ServiceProvider extends ServiceProvider
    {
    
      public function register()
      {
          app('router')->aliasMiddleware('admin.bootstrap', ModuleBootstrap::class);
      }
          .
          .
          .
    }
  • app/{模組名}/bootstrap.php:當前模組 bootstrap.php 檔案,不受 laravel-admin 和其他模組的 bootstrap.php 影響,功能與 laravel-admin bootstrap.php 一致,具體參考官網

本作品採用《CC 協議》,轉載必須註明作者和本文連結
活著就意味著必須要做點什麼,請好好努力!

相關文章