hassankerdash/laravel-modular

模块化您的 Laravel 应用程序

0.3 2024-03-18 11:01 UTC

This package is auto-updated.

Last update: 2024-09-18 11:58:24 UTC


README

hassankerdash/laravel-modular 是 Laravel 应用的模块化系统。它使用 Composer 路径仓库 进行自动加载,以及 Laravel 包发现 进行模块初始化,然后提供最小化工具以填补任何空白。

该项目既是惯例集,也是包。基本思想是在单独的 modules/ 目录中创建“模块”,这样您可以更好地组织大型项目。这些模块使用现有的 Laravel 包系统,并遵循现有的 Laravel 惯例。

安装

要开始,运行

composer require hassankerdash/laravel-modular

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

发布配置

虽然不是必需的,但强烈建议您自定义模块的默认命名空间。默认情况下,它设置为 Modules\,这完全没问题,但如果您将来选择将模块提取到单独的包中,这会使事情变得复杂。

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

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

创建模块

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

php artisan make:module my-module 

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

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

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

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

composer update modules/my-module

可选:配置同步

您可以使用同步命令确保项目已为模块支持设置

php artisan modules:sync

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

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

用法

所有模块都遵循现有的 Laravel 惯例,自动发现应该在没有问题的多数情况下按预期工作

  • 命令通过 Artisan 自动注册
  • 迁移将由 Migrator 运行
  • factory() 自动加载生成器
  • 为您的模型自动发现策略
  • 自动发现 Blade 组件
  • 自动发现事件监听器

命令

包命令

我们提供了一些辅助命令

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

Laravel “make:” 命令

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

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

其他 Laravel 命令

除了为大多数 make: 命令添加 --module 选项外,我们还为 db:seed 命令添加了相同的选项。如果您将 --module 选项传递给 db:seed,它将在您的模块命名空间内查找您的种子文件

  • php artisan db:seed --module=[模块名称] 将尝试调用 Modules\MyModule\Database\Seeders\DatabaseSeeder
  • php artisan db:seed --class=MySeeder --module=[模块名称] 将尝试调用 Modules\MyModule\Database\Seeders\MySeeder