ejunker/modular

模块化您的Laravel应用程序

1.0.2 2020-10-26 16:18 UTC

README

PHPUnit Test Coverage

InterNACHI/Modular 是一个用于Laravel应用程序的模块化系统。它使用 Composer路径仓库 进行自动加载,并使用 Laravel包发现 进行模块初始化,然后提供最小的工具来填补任何空白。

该项目既是约定集,也是包。基本思想是在一个独立的 app-modules/ 目录中创建“模块”,这有助于更好地组织大型项目。这些模块使用现有的 Laravel包系统,并遵循现有的Laravel约定。

教程视频

Intro video

安装

要开始,运行

composer require internachi/modular

Laravel将自动发现该包,并将为您自动设置一切。

发布配置

虽然这不是必需的,但强烈建议您自定义模块的默认命名空间。默认情况下,这设置为 Modules\,这完全可行,但会使您在将来选择将其提取为单独包时更难以提取模块。

我们建议配置一个组织命名空间(例如,我们使用 "InterNACHI")。为此,您需要发布包配置

php artisan vendor:publish --tag=modular-config

创建模块

接下来,让我们创建一个模块

php artisan make:module my-module 

Modular将为您搭建一个新的模块

app-modules/
  my-module/
    composer.json
    src/
    tests/
    routes/
    resources/
    database/

它还将向您的应用的 composer.json 文件中添加两个新条目。第一个条目将 ./app-modules/my-module/ 注册为 路径仓库,第二个要求 modules/my-module:*(就像任何其他Composer依赖项一样)。

Modular将提醒您执行Composer更新,现在让我们这么做

composer update modules/my-module

可选:配置同步

您可以使用sync命令确保项目已配置为支持模块

php artisan modules:sync

这将向您的 phpunit.xml 文件(如果存在)添加一个 Modules 测试套件,并更新您的 PhpStorm Laravel插件 配置(如果存在),以正确查找您的模块视图。

您可以在任何时候安全地运行此命令,因为它只会添加缺失的配置。您甚至可以将它添加到应用程序的 composer.json 文件中的 post-autoload-dump 脚本中。

用法

所有模块都遵循现有的Laravel约定,并且在大多数情况下自动发现应按预期工作

  • 命令自动与Artisan注册
  • 迁移将由迁移器执行
  • factory() 自动加载工厂
  • 为您的模型自动发现策略

目前有一个 例外

  • 事件发现(这是可选的,默认情况下在Laravel中禁用)目前不支持。

命令

我们提供了一些辅助命令

  • php artisan make:module — 搭建新的模块
  • php artisan modules:cache — 缓存加载的模块以提高自动发现速度
  • php artisan modules:clear — 清除模块缓存
  • php artisan modules:sync — 更新项目配置(如 phpunit.xml)以包含模块设置
  • php artisan modules:list — 列出所有模块

我们还为大多数 Laravel 的 make: 命令添加了 --module= 选项,以便您可以使用所有熟悉的现有工具。命令本身完全相同,这意味着您可以使用您自己的 自定义模板 以及 Laravel 提供的所有其他内容

  • php artisan make:controller MyModuleController --module=my-module
  • php artisan make:command MyModuleCommand --module=my-module
  • php artisan make:component MyModuleComponent --module=my-module
  • php artisan make:channel MyModuleChannel --module=my-module
  • php artisan make:event MyModuleEvent --module=my-module
  • php artisan make:exception MyModuleException --module=my-module
  • php artisan make:factory MyModuleFactory --module=my-module
  • php artisan make:job MyModuleJob --module=my-module
  • php artisan make:listener MyModuleListener --module=my-module
  • php artisan make:mail MyModuleMail --module=my-module
  • php artisan make:middleware MyModuleMiddleware --module=my-module
  • php artisan make:model MyModule --module=my-module
  • php artisan make:notification MyModuleNotification --module=my-module
  • php artisan make:observer MyModuleObserver --module=my-module
  • php artisan make:policy MyModulePolicy --module=my-module
  • php artisan make:provider MyModuleProvider --module=my-module
  • php artisan make:request MyModuleRequest --module=my-module
  • php artisan make:resource MyModule --module=my-module
  • php artisan make:rule MyModuleRule --module=my-module
  • php artisan make:seeder MyModuleSeeder --module=my-module
  • php artisan make:test MyModuleTest --module=my-module

nwidart/laravel-modules 的比较

Laravel Modules 是一个自 2016 年以来一直存在的优秀包,被数千个项目使用。我们决定构建自己的模块系统而不是使用 laravel-modules 的主要原因是两个决定

  1. 我们希望有一个遵循 Laravel 惯例的东西,而不是使用它自己的目录结构等。
  2. 我们希望有一个感觉“更轻量级”的东西

如果您正在构建一个需要支持可动态启用和禁用第三方模块的 CMS,Laravel Modules 将是一个更好的选择。

另一方面,如果您对模块化组织更感兴趣,并希望紧密遵循 Laravel 惯例,我们强烈建议您尝试使用 InterNACHI/Modular!