lucidnetworks / laravel-modular
Laravel 5 的模块化模式生成器
Requires
- php: >=5.4.0
- laravel/framework: >=5.1.6
This package is not auto-updated.
Last update: 2024-09-14 18:53:12 UTC
README
使用结构来将 Laravel 作为模块化系统使用
安装此应用程序
- 在您的 composer.json 中包含
"lucidnetworks/laravel-modular": "^1.0"
- 将
Lucid\Modular\ModulesServiceProvider::class
添加到您的 config/app 提供者数组中 - 运行
php artisan vendor:publish
- 运行
php artisan migrate
###模块激活或停用 要激活或停用模块,只需将 moduleName 插入到您的模块配置文件中的 _modules 数组中
####环境配置 您可以在 .env 文件中使用密钥 MODULES_CONFIG_FILE
指定模块的另一个配置文件。例如:使用 MODULES_CONFIG_FILE=modules_my_site
以使用 modules_my_site 作为配置文件,否则您可以使用 MODULES_CONFIG_FILE=my_config.modules
在 my_config 文件中指定一个数组
##创建新模块
- 使用
php artisan modules:new ModuleName
创建您的模块结构 - 将模块名称添加到 modules.php 或您的特定模块配置文件中的 _modules 中
##模块结构
- boot.php => 当模块实例化时加载,在这里放置您的模块路由、钩子等任何我们希望在模块引导时加载的内容
- config.php => 模块配置文件,此配置将可使用
config('{module_name}.{key}')
加载 - views/ => 模块视图,这些视图将可使用
view("{module_name}::{view}")
加载,这些视图是可覆盖的 - lang/ => 模块翻译,这些翻译将可使用
trans("{module_name}::{key}")
加载(使用每个语言的子文件夹,如通常一样) - assets/ => 模块公共文件,这些文件将在这个公共 URL 中 {your_laravel_url}/modules/{moduleName}/{path_inside_assets_folder}
- migrations/ => 模块迁移,请参阅迁移部分以了解如何进行
- tests/ => 模块测试,请参阅测试部分以了解如何进行
##模块路由:必须在 boot.php 中声明模块路由,记住您必须在使用所有方法调用完整命名空间或使用命名空间属性。要使用带参数的路由,请使用 route 键 'params_closure' => function(){}
,它接收一个闭包,该闭包返回创建路由所需的所有参数
路由示例:Route::group(['middleware' => ['web','auth'], 'as'=>'admin::', 'namespace' => 'Modules\Admin\Controllers', 'params_closure' => function(){ return ['id' => 23]; }], function() { /* 路由代码 */ });
##钩子:钩子允许注册可以从您的应用程序视图中调用的函数。要添加钩子,请使用 ModulesManager::attachHook(string Point, string Name, callable Closure)
通常钩子必须添加到 boot.php 中
[参数]
- Point:钩子将被分配的附加点
- Name:钩子的内部唯一名称,始终使用 {module_name}::{hook_name} 作为名称。例如 MyModule::MyHook
- Closure:此闭包必须返回一个字符串,该字符串将与其他附加到同一点的所有钩子连接在一起,当调用
ModulesManager::getHook({attach_point})
时
###钩子排序:每次调用 ModulesManager::attachHook
时,钩子将被保存到数据库中,这允许根据您的偏好对钩子进行排序,如果您没有设置排序,则所有钩子将根据其插入数据库的顺序进行排序
钩子示例:ModulesManager::attachHook('admin.actionBar','MyModule::HookAction1', function(){ return 'TEST-HOOK'; });
###钩子使用:要获取您已注册的钩子内容,请使用 ModulesManager::getHook({attach_point})
,这将返回所有附加到该附加点的钩子返回的所有 HTML
##模块公开方法注册 此工具允许您注册一个可以作为钩子调用的方法,但在此情况下,它可以返回任何类型的结果,允许您将任何模块方法设置为公开。要注册公开方法,请使用 ModulesManager::registerModuleFunc(string Name, callable Closure);
[参数]
- 名称:函数的公开唯一名称,始终使用 {module_name}::{function_name} 作为名称。例如:MyModule::MyFunction
- 闭包:函数将接收一个参数数组并返回任何类型的结果,例如:function($params){ /* 一些代码 */ }
###调用模块公开方法 在您的模块上注册方法后,您可以从任何位置使用 ModulesManager::callModuleFunc(string Name, array Params = [], Default = null)
或具有相同签名的 callModuleFuncOrFail
来生成异常,如果 {method_name} 未注册
[参数]
- 名称:函数的公开唯一名称,始终使用 {module_name}::{function_name} 作为名称。例如:MyModule::MyFunction
- 参数:方法参数数组,将被闭包接收
- 默认值:如果名称未注册,将返回的值
callModuleFuncOrFail(string Name, array Params = [],string Message = '')
如果名称未注册将生成异常,在这种情况下,Message 是生成的异常将显示的消息。例如:‘您必须安装 x 模块’
##资产:每个模块都可以有自己的公开文件,要创建公开内容,只需将其放入模块资产文件夹中,该内容将被放入下一个公开 URL {your_laravel_base_url}/modules/{moduleName}/{path_to_your_file_from_assets}
出于安全原因,不允许在路径中使用 ../
#ModulesManager 工具
##应用程序消息:您可以使用 ModulesManager::displayHeaderMessage(string $message, string $type = 'danger', string $title = '', bool $dismissible = true, string $icon = '')
方法注册应用程序消息,在您可以在任何时间获取消息之前,使用 ModulesManager::getHeaderMessages()
。例如,您可以注册您的模块错误消息并使用 getHeaderMessages 在您的应用程序中显示它们
##静态数组 ::css 和 ::js ModulesManager 的这两个静态数组允许您从您的模块中注入一些 CSS 和 JS 文件名,例如:ModulesManager::js[] = '/modules/MyModule/js/test.js'
之后,您可以在需要的地方访问所有文件名,例如:ModulesManager::js
或 ModulesManager::css
,例如,您可以在头部模板中使用这些数组来加载所有模块所需的文件
记住,如果您想使用模块资产文件夹中的文件,您必须使用其公开路径 /modules/{moduleName}/{path_to_your_file_from_assets}
##迁移 要执行模块迁移,请运行 artisan modules:migrate ModuleName
如果您想回滚迁移,请使用 artisan modules:migrate ModuleName --down
如果您的模块配置文件与 modules.php 不同,您必须指定配置文件或配置键,例如:artisan modules:migrate ModuleName YourConfigFile
或 artisan modules:migrate ModuleName YourConfigFile --down
#测试 要执行您的模块测试,请运行 artisan modules:test ModuleName
或只需运行 artisan modules:test
以运行所有激活的模块测试。
如果您的模块配置文件与 modules.php 不同,您必须指定配置文件或配置键,例如:artisan modules:test ModuleName YourConfigFile
或 artisan modules:test all YourConfigFile
以运行所有测试
请记住,所有测试都将像在您的 Laravel 测试文件夹中运行一样运行,而不是在您的模块测试文件夹中,因此所有测试都必须从 TestBase 扩展,而不带任何命名空间
#Artisan 命令 您可以轻松地添加您的模块 artisan 命令,只需将 className 添加到模块 config.php 文件中的 _commands 数组中即可。例如:'_commands' => ['App\Modules\MyModule\commands\testCommand']