laravel-admin 按模块拆分后台业务组件 laravel-admin-modules

第一次在社区写文章,有不足和错误之处,请大家请及时指出😊

场景

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 协议》,转载必须注明作者和本文链接
活着就意味着必须要做点什么,请好好努力!
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!