sethsandaru / laravel-hmvc-sample
Laravel HMVC结构示例项目。
v1.0.0
2018-10-17 04:39 UTC
Requires
- php: ^7.1.3
- fideloper/proxy: ^4.0
- laravel/framework: 5.7.*
- laravel/tinker: ^1.0
Requires (Dev)
- beyondcode/laravel-dump-server: ^1.0
- filp/whoops: ^2.0
- fzaninotto/faker: ^1.4
- mockery/mockery: ^1.0
- nunomaduro/collision: ^2.0
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-09-23 15:30:54 UTC
README
这是一个示例项目,用于构建和使用Laravel 5.7+、6、7、8的HMVC结构。
什么是HMVC?
您可以在以下位置找到更多信息:[HMVC - 维基百科](https://en.wikipedia.org/wiki/Hierarchical_model%E2%80%93view%E2%80%93controller)
主要优点(M.O.R.E)
- 模块化:减少应用程序不同部分之间的依赖关系。
- 组织:为每个相关的三联组创建一个文件夹,可以使工作量更轻。
- 可用性:由于设计本身,几乎可以重用每段代码。
- 可扩展性:使应用程序更易于扩展,同时不牺牲维护的简便性。
其他优点
- 可以轻松实现微服务。将模块拆分成服务会非常快。
- 在项目本身中,就像是一个Mono-Repo策略。
Laravel HMVC结构 - 此项目
- 顶部 - 基础MVC - Laravel应用
- 模块1 MVC - 小型Laravel应用
- 模块2 MVC - 小型Laravel应用
- ...
- 模块n MVC - 小型Laravel应用
模块结构
- 模块名称
- 配置:您的配置文件在这里。
- Http
- 控制器:您的控制器在这里。
- 请求
- 语言:您的语言文件在这里(翻译)
- en
- vi
- ...
- 库:您的特殊库类文件在这里。
- 模型:您的模型在这里。
- 视图:您的视图文件在这里。
- 路由:模块的所有路由
- routes.php:此模块的路由。
- 服务:您的服务处理程序在这里
- 提供者:服务提供者
- 策略:模块的策略
所以您可以看到,模块只是一个小型Laravel应用程序。您不必创建完整结构才能使其工作。
最重要的是:ServiceProvider。没有它,我们无法启动模块。
如何创建新的模块?
- 在
app/Modules内部创建您的模块文件夹 - 在您的模块文件夹内部,创建您需要的文件夹,如上面的结构所示(ServiceProvider、Views等)
- 创建一个ServiceProvider并将其注册到
configs/app.php - 测试您的模块
如何访问视图/语言/配置?
模块文件夹名称是别名,以便我们加载视图、语言文本等。
示例:我有Home模块。别名:home
加载视图
我们需要在开头插入模块别名,如下所示
return view('home::home.view', $arrData);
获取语言(翻译)文本
trans('home::home.hello'); // Hello __('home::home.world'); // World
获取配置值
就像正常的配置一样,您可以通过别名获取您的配置,如下所示
config('home.text'); // get 'text' in home alias
迁移
它是如何工作的?
当您运行php artisan migrate时,它将像这样运行
- Base/Core (database/migrations) first - Thought each module - Module 1 - Module 2 - ... - Module n
创建迁移
只需在<ModulePath>/Migrations中创建迁移文件(Laravel格式)。
注意
- 文件名必须是:
yyyy_MM_dd_hhmmss_class_name_here.php(遵循Laravel格式)
控制台命令注册
- 在
app/Modules/<insert_module_name/Console/Commands中创建您的命令 - 打开您的模块的ServiceProvider,在
boot方法中注册它,如下所示
$this->commands([ MyCommand::class, ]);
注意:较旧的Laravel版本可能没有这个机会。当前项目使用Laravel 5.7
总结
如果您有任何问题或疑问,请随时向我提问。
版权 © 2018-2021 by Seth Phat.