kascat / easy-module
为 Laravel 提供的简易模块化结构
Requires
- php: ^8.0
- laravel/framework: >=8.0
README
Laravel 框架的模块化结构。
模块化结构为项目提供了更好的组织,将每个功能/特性的代码集中在一个地方,便于创建和维护大小项目。
Easy Module 包不限制 Laravel 标准文件结构的使用,可以用于新项目和现有项目。
安装
要安装 Easy Module 包,只需按照以下三个步骤操作:
1. 通过 composer 安装
composer require "kascat/easy-module"
2. 将以下类添加到 config/app.php
文件中 providers
部分
Kascat\EasyModule\Core\ModularServiceProvider::class
示例
'providers' => [ // ...Outros providers existentes Kascat\EasyModule\Core\ModularServiceProvider::class ]
3. 在项目根目录的 composer.json
文件中配置 psr-4
,注册 modules
文件夹
"": "modules/"
示例
"autoload": { "psr-4": { "": "modules/", "App\\": "app/", } },
创建模块
要创建一个完整的模块,只需执行 php artisan easy:module [模块名称]
命令,它将生成标准结构,但 Easy Module 包还提供了一系列命令,可以帮助单独创建模块的结构和文件。
文件已生成,包含创建、读取、编辑和删除(CRUD)数据库表中与模块 model 相关的结构,只需配置 model 和 request 的表属性即可。
命令
创建包含主要文件的完整模块
php artisan easy:module [nome do módulo]
创建 Controller 及相关文件(Controller、Request、Response、Api Route)
php artisan easy:controller [nome do módulo]
创建 Model
php artisan easy:model [nome do módulo]
创建 Service 和 Repository
php artisan easy:service [nome do módulo]
创建路由文件(api.php 和 web.php)
php artisan easy:route [nome do módulo]
创建 artisan 命令文件(console.php)
php artisan easy:command [nome do módulo]
替换文件
相同的命令可以多次用于同一模块,但已存在的文件不会被替换,将创建带有唯一后缀的新文件,之后可以适当修改。
要替换现有文件,请在命令中使用 --overwrite
或 -O
标志
示例
php artisan easy:module sample -O
结构
模块化结构非常简单易懂,每个模块都包含具有特定目的的文件。
以下是一个模块(Sample)结构的示例,由 php artisan easy:module sample
命令生成:
> modules
> Samples
api.php
Sample.php
SampleController.php
SampleRepository.php
SampleRequest.php
SampleResponse.php
SampleService.php
如果您的模块不使用自动创建的某些文件,可以将其删除,但请注意可能存在的其他文件引用。
责任
以下列出了模块中每个文件的责任。
Model
model 文件/类遵循 Laravel 原始 model 的相同模式和结构,与数据库表通信,并通常定义属性和关系。
文件和类的名称接收模块的单数名称,例如:User.php
User::class
Controller
controller 文件也以相同的方式行为,负责包含路由将调用的函数。但区别在于使用适当的文件(Request 和 Response)进行请求验证和响应格式化。
Request
用于对每个路由接收到的数据进行验证。
Response
用于对路由响应数据进行格式化或修改。
Repository
repository 只负责构建将在数据库中执行的各种 queries。
Service
O服务负责处理模块的主要逻辑(业务规则)。
API和Web
路由文件api.php
和web.php
用于注册模块的路由,这与Laravel中的routes/api.php
和routes/web.php
文件中的定义方式相同。
控制台
文件console.php
用于创建与应用模块相关的自定义命令,它可以像Laravel中的routes/console.php
文件一样使用,并且可以通常在app/Console/Kernel.php
中进行调度。