lucidnetworks/laravel-modular

Laravel 5 的模块化模式生成器

1.0.1-beta 2016-09-08 20:49 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:53:12 UTC


README

使用结构来将 Laravel 作为模块化系统使用

安装此应用程序

  1. 在您的 composer.json 中包含 "lucidnetworks/laravel-modular": "^1.0"
  2. Lucid\Modular\ModulesServiceProvider::class 添加到您的 config/app 提供者数组中
  3. 运行 php artisan vendor:publish
  4. 运行 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 文件中指定一个数组

##创建新模块

  1. 使用 php artisan modules:new ModuleName 创建您的模块结构
  2. 将模块名称添加到 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::jsModulesManager::css,例如,您可以在头部模板中使用这些数组来加载所有模块所需的文件

记住,如果您想使用模块资产文件夹中的文件,您必须使用其公开路径 /modules/{moduleName}/{path_to_your_file_from_assets}

##迁移 要执行模块迁移,请运行 artisan modules:migrate ModuleName

如果您想回滚迁移,请使用 artisan modules:migrate ModuleName --down

如果您的模块配置文件与 modules.php 不同,您必须指定配置文件或配置键,例如:artisan modules:migrate ModuleName YourConfigFileartisan modules:migrate ModuleName YourConfigFile --down

#测试 要执行您的模块测试,请运行 artisan modules:test ModuleName 或只需运行 artisan modules:test 以运行所有激活的模块测试。

如果您的模块配置文件与 modules.php 不同,您必须指定配置文件或配置键,例如:artisan modules:test ModuleName YourConfigFileartisan modules:test all YourConfigFile 以运行所有测试

请记住,所有测试都将像在您的 Laravel 测试文件夹中运行一样运行,而不是在您的模块测试文件夹中,因此所有测试都必须从 TestBase 扩展,而不带任何命名空间

#Artisan 命令 您可以轻松地添加您的模块 artisan 命令,只需将 className 添加到模块 config.php 文件中的 _commands 数组中即可。例如:'_commands' => ['App\Modules\MyModule\commands\testCommand']