kent013 / artisan-command-pseudo-ca
一个Artisan命令,用于生成usecase / request / resource类,以实现伪清洁架构。
v0.0.4
2023-06-14 14:28 UTC
Requires
- php: ^8.0
- laravel/framework: ^8.0 || ^9.0 || ^10.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.17
- nunomaduro/larastan: ^2.6
- orchestra/testbench: ^8.5
README
Artisan make命令用于生成usecase / request / resource类,以实现伪清洁架构。
此命令基于关于伪清洁架构的文章。
- 使用Laravel 5年,最终实现的“完全不用努力”的“假清洁架构”
- https://zenn.dev/mpyw/articles/ce7d09eb6d8117 (仅限日语)
- 由mpyw撰写 (https://zenn.dev/mpyw)
伪/放松的清洁架构
laravel的伪清洁架构是一种放松的领域建模架构,由Request
、Resource
和Usecase
组成。这个架构是由mpyw提出的。我在我的几个项目中使用了这个架构,所以我只需要一个类生成器。
根据mpyw写的文章,Request
类似于
class StoreRequest extends FormRequest { public function authorize(Gate $gate): bool { $community = $this->route()->parameter('community'); return $gate->authorize('store', [Post::class, $community]); } public function rules(): array { return [ 'title' => 'required|string|max:30', 'body' => 'required|string|max:10000', ]; } public function makePost(): Post { return new Post($this->validated()); } }
Resource
类似于
class PostResource extends JsonResource { public function toArray($request): array { return [ 'title' => $this->resource->title, 'body' => $this->resource->body, 'created_at' => $this->resource->created_at, 'updated_at' => $this->resource->updated_at, ]; } }
Usecase
类似于
class StoreAction { public function storeAfterDomainValidation(User $user, Community $community): self { $userPostsCountToday = $user ->posts() ->where('community_id', $community->id) ->where('created_at', '>=', Carbon::midnight()) ->count(); if ($userPostsCountToday >= 200) { throw new PostLimitExceededException('Exceeded'); } $post->save(); return $post; } }
带有Request
、Resource
和Usecase
的控制器如下
class PostContoller { public function store(StoreRequest $request, StoreAction $action): PostResource { $post = $request->makePost(); try { return new PostResource($action($user, $community, $post)); } catch (PostLimitExceededException $e) { throw new TooManyRequestsHttpException(null, $e->getMessage(), $e); } } }
安装
composer require --dev kent013/artisan-command-pseudo-ca
生成配置文件
php artisan vendor:publish --tag="pseudoca"
配置
PSEUDOCA_USECASE_NS="\UseCases"
PSEUDOCA_REQUEST_NS="\Http\Requests"
PSEUDOCA_RESOURCE_NS="\Http\Resources"
如果您想更改命名空间,请将上述行添加到您的.env
文件中并更改值。
生成Usecase
php artisan make:pseudoca:usecase LoginAction
将在根命名空间下生成LoginAction
类,该命名空间以PSEUDOCA_USECASE_NS
结尾。默认命名空间是\UseCase
。
生成Request
php artisan make:pseudoca:request LoginRequest
将在根命名空间下生成LoginRequest
类,该命名空间以PSEUDOCA_REQUEST_NS
结尾。默认命名空间是\Http\Requests
。
生成Resource
php artisan make:pseudoca:resource LoginResource
将在根命名空间下生成LoginResource
类,该命名空间以PSEUDOCA_RESOURCE_NS
结尾。默认命名空间是\Http\Resources
。
一次性生成PseudoCA类
php artisan make:pseudoca Login
将生成LoginResource
、LoginRequest
和LoginUsecase
。