ejunker / modular
模块化您的Laravel应用程序
Requires
- php: >=7.3
- composer/composer: ^1.10
- illuminate/support: ^7.0|^8.0
Requires (Dev)
- mockery/mockery: ^1.3
- orchestra/testbench: ^5.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-12 09:28:59 UTC
README
InterNACHI/Modular
是一个用于Laravel应用程序的模块化系统。它使用 Composer路径仓库 进行自动加载,并使用 Laravel包发现 进行模块初始化,然后提供最小的工具来填补任何空白。
该项目既是约定集,也是包。基本思想是在一个独立的 app-modules/
目录中创建“模块”,这有助于更好地组织大型项目。这些模块使用现有的 Laravel包系统,并遵循现有的Laravel约定。
教程视频
安装
要开始,运行
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
的主要原因是两个决定
- 我们希望有一个遵循 Laravel 惯例的东西,而不是使用它自己的目录结构等。
- 我们希望有一个感觉“更轻量级”的东西
如果您正在构建一个需要支持可动态启用和禁用第三方模块的 CMS,Laravel Modules 将是一个更好的选择。
另一方面,如果您对模块化组织更感兴趣,并希望紧密遵循 Laravel 惯例,我们强烈建议您尝试使用 InterNACHI/Modular!