bchalier/laravel-modules

laravel中的模块管理。

2.7.1 2021-10-08 08:56 UTC

README

简介

此包旨在允许您将laravel允许您创建的所有内容分成模块。

尽管其他人也在做同样的事情,但我还是制作了这个包,因为在使用了它们之后,过了一段时间我总是发现它们不完整、不再维护、不遵守laravel标准和理念(例如,使用module:make-controller命令而不是make:controller,另一个文件结构等)。所以在尝试了3-4个模块后,我感到沮丧,并开始制作自己的包,试图不重复之前看到的错误。

这是结果,我希望您会像我一样喜欢它!这是我的第一个公开包,所以请随时告诉我您可能有的任何建议、问题、错误报告、功能请求!

版本控制

此包遵循语义版本控制,请参阅: https://semver.org/

安装

您可以通过composer安装此包

composer require bchalier/laravel-modules

命令

所有标准make命令都通过-M|module=[module alias]选项进行了扩展,以下是一个示例

php artisan make:model -Muser UnicornModel

由于这是一个扩展而不是替换,因此所有选项都是可用和工作的(或应该是!)

php artisan make:model -cfmr -Muser UnicornModel

此包还添加了一些用于处理模块本身的命令

  • make:module {modules*} {?--fill} : 创建一个或多个新模块,使用--fill选项在新建的模块中添加所有可能的元素。
  • module:install {modules*} : 安装一个或多个模块(在数据库中)
  • module:reinstall {modules*} : 重新安装模块(更新数据库),非常有用
  • module:uninstall {modules*} : 卸载一个或多个模块(保留文件,清理数据库)
  • module:enable {modules*} : 加载模块(文件总是由composer加载,但提供者、路由等只有在模块启用时才会加载)
  • module:disable {modules*} : 禁用模块
  • module:delete {modules*} : 删除模块的数据库和文件,请小心,此命令将删除所有模块文件并卸载它。

结构

模块内部几乎就是一个普通的laravel,以下是一个示例(您可以自己使用php artisan make:module test --fill来创建它)

modules/Test/
├── app
│   ├── Broadcasting
│   │   └── DummyChannel.php
│   ├── Console
│   │   ├── Commands
│   │   │   └── DummyCommand.php
│   │   └── Kernel.php
│   ├── Events
│   │   └── DummyEvent.php
│   ├── Exceptions
│   │   └── DummyException.php
│   ├── Http
│   │   ├── Controllers
│   │   │   └── DummyController.php
│   │   ├── Middleware
│   │   │   └── DummyMiddleware.php
│   │   ├── Requests
│   │   │   └── DummyRequest.php
│   │   └── Resources
│   │       └── DummyResource.php
│   ├── Jobs
│   │   └── DummyJob.php
│   ├── Listener
│   │   └── DummyListener.php
│   ├── Mail
│   │   └── DummyMail.php
│   ├── Models
│   │   └── DummyModel.php
│   ├── Notification
│   │   └── DummyNotification.php
│   ├── Observers
│   │   └── DummyObserver.php
│   ├── Policies
│   │   └── DummyPolicy.php
│   ├── Providers
│   │   └── DummyProvider.php
│   ├── Rules
│   │   └── DummyRule.php
│   └── Services
│       └── DummyService.php
├── composer.json
├── config
│   ├── superconfig.php
├── database
│   ├── factories
│   │   └── DummyFactory.php
│   ├── migrations
│   │   └── 2019_07_04_105604_dummy_migration.php
│   └── seeds
│       ├── DatabaseSeeder.php
│       └── DummySeeder.php
├── resources
│   └── lang
│       ├── en
│       │   └── exceptions.php
│       └── fr
│           └── exceptions.php
├── routes
│   ├── api.php
│   ├── channels.php
│   ├── console.php
│   └── web.php
└── tests
    ├── Feature
    │   └── DummyTest.php
    └── Unit
        └── DummyTest.php

Composer

在模块的根目录中,您有一个composer.json,与您所知道的相同,只是多了一点,以下是一个示例。

它不会安装包,您是否想查看wikimedia/composer-merge-plugin,但它与composer 2不兼容。

{
  "name": "Core",
  "description": "A perfect description for a brand new module !",
  "keywords": [
    "module",
    "laravel"
  ],
  "license": "MIT",
  "require": {
    "php": "^7.1"
  },
  "extra": {
    "laravel-modules": {
      "name": "Core",
      "alias": "core",
      "description": "The core module, for module management.",
      "install": {
        "migrate": true,
        "createDir": "modules"
      },
      "loadParameters": {
        "compartmentalize": {
          "migrations": true
        }
      },
      "providers": [
        "SystemModules\\Core\\App\\Providers\\EventServiceProvider",
        "SystemModules\\Core\\App\\Providers\\CommandExtendProvider"
      ],
      "aliases": {
        "Test": "Illuminate\\Support\\Facades\\App",
        "ModulesManager": "SystemModules\\Core\\Services\\ModulesManager"
      }
    }
  }
}

这意味着:

  • name : 实际上可以是任何您想要的内容,只是一个外观值。
  • alias : 这是您将在每个命令中使用的内容。
  • description : 一个描述,当然了。
  • install.migrate : 在模块安装时迁移迁移。
  • install.createDir : 在安装时创建一个您喜欢的目录。
  • loadParameters.compartmentalize.migrations : 将迁移从您的应用程序的其他部分隔离出来,在这个示例中,模块表迁移不会在除migrate:fresh之外的任何migrate命令中调用,因为该命令会删除所有表而不管迁移如何,您将需要在此之后重新安装所有模块。
  • 提供者 : 列出你希望在模块中加载的所有提供者。
  • 别名 : 列出你希望在模块中拥有的所有别名。

请记住,您需要调用 php artisan module:reinstall YOUR_MODULE_ALIAS 来更新上述设置。

.env

这里添加了一些设置,可能用于您的 .env 文件。

API_PREFIX='web' // a prefix for all the web routes, '' by default
WEB_PREFIX='api' // a prefix for all the api routes, 'api' by default

MODULES_CONFIG_PATH='modules.json' // the location of the global config file (it store the installed modules)

基本就是这样,可能还有很多改进的空间,所以我在等待您的评论!