inium / laravel-mvcs
分层架构(分层架构,仓库/服务/DTO)在Laravel上的框架
Requires
- php: ^8.1
- netresearch/jsonmapper: ^4.0
- symfony/http-foundation: ^6.0
README
这是一个基于Laravel实现的Repository-Service Scaffolding的包。
概述
该包提供了一种Scaffolding,用于在Laravel中使用Repository - Service。
Laravel提供了易于实现Request & Response处理和Business Logic的Controller。然而,在这样的配置中,Business Logic的复用会受到限制。因此,一些Framework(如Spring Boot, NestJS)提供了分层架构模式(Repository - Service),将关注点(Response & Response, Business Logic, DB Logic等)分层。此外,对于大型项目,将关注点分离有利于项目的成功执行、复用以及持续的维护和运营。
Laravel没有提供实现这种分层架构所需的Scaffolding代码。因此,我们制作了一个包,用于在Laravel中生成用于实现Repository和Service的Scaffolding代码。
本包基于PHP 8.1 / Laravel 9运行。
功能
本包提供了包含REST API基本实现的Layered Architecture Scaffolding。
创建分层架构所需的Scaffolding
本包通过使用“使用方法”中的代码生成命令,自动生成以下项,以满足REST API基本实现的需求。REST API基本实现通过在Controller内注入Service Interface来使用。
运行环境
本包基于PHP 8.1 / Laravel 9运行。
使用方法
1. 安装包
在已安装Laravel 9.x的项目目录中,使用composer命令进行安装。
> composer require inium/laravel-mvcs
2. 代码生成
安装包后,使用以下命令生成repository - service Scaffolding代码。
> php artisan mvcs:create {moduleName} {option:--all|--module}
命令的参数如下。
- moduleName: 类名,例如,对于论坛,可以是Board、Post、Comment等。
- option: 生成选项,有两种。
--all:生成Request、Controller、Repository(interface, concrete)、Service(interface, concrete)、DTO + Model、Database(factories、migrations、seeders)的Scaffolding。如果没有option,则默认使用。--module:在--all选项中,除了Model和Database外,生成Request、Controller、Repository(interface, concrete)、Service(interface, concrete)、DTO的Scaffolding。
创建论坛的帖子类(Post)的示例如下。
- 生成所有Scaffolding代码:
php artisan mvcs:create Post --all或php artisan mvcs:create Post - 在--all选项中,除了Model和Database外,生成Scaffolding代码:
php artisan mvcs:create Post --module
3.(可选)生成interface - concrete类的Bind代理Provider
在生成代码后,为了使用Repository和Service类,需要在AppServiceProvider中将interface - concrete类bind。
然而,如果bind的interface - concrete类很多,则必须手动输入。因此,本包提供了一种按预定规则将interface - concrete Scaffolding发布到app/Modules目录的Service Provider,以简化此过程。
注意:如果使用提供的Service Provider,则无法修改特定interface - concrete类的bind。
例如,如果要将PostServiceInterface -> PostService更改为PostServiceInterface -> PostNewService,则无法在提供的Service Provider类中进行更改。在这种情况下,应停止使用提供的Service Provider,并直接
bind。
3-1. 发布provider
执行以下命令将创建app/Providers内的MvcsServiceProvider.php。此类实现了通过本包的命令绑定生成的interface-concrete类的代码。
> php artisan vendor:publish --tag=mvcs-provider
3-2. 在config/app.php中注册Provider
为了使用发布的provider,需要在config/app.php的providera项中按以下方式注册provider。
// config/app.php return [ ... "providers" => [ ... /* * Package Service Providers... */ App\Providers\MvcsServiceProvider::class, ... ] ];
示例
使用本包实现的论坛、帖子、帖子评论的代码已按Laravel结构存储在example目录中,供参考。
- 有关API的详细信息,请参考以下由vscode的REST Client实现的文件。
- 论坛API:
/example/board.rest.http - 文章API:
/example/post.rest.http - 文章评论API:
/example/comment.rest.http
- 论坛API:
许可证
MIT