hassankerdash / laravel-modular
模块化您的 Laravel 应用程序
Requires
- php: >=8.0
- ext-dom: *
- ext-simplexml: *
- composer/composer: ^2.1
- illuminate/support: ^11
Requires (Dev)
- ext-json: *
- friendsofphp/php-cs-fixer: ^3.14
- livewire/livewire: ^2.5|^3.0
- mockery/mockery: ^1.5
- orchestra/testbench: ^7.10|^8|^9|9.x-dev|dev-master
- phpunit/phpunit: ^9.5|^10.5
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