kent013/artisan-command-pseudo-ca

一个Artisan命令,用于生成usecase / request / resource类,以实现伪清洁架构。

v0.0.4 2023-06-14 14:28 UTC

This package is auto-updated.

Last update: 2024-09-14 17:21:32 UTC


README

Artisan make命令用于生成usecase / request / resource类,以实现伪清洁架构。

此命令基于关于伪清洁架构的文章。

伪/放松的清洁架构

laravel的伪清洁架构是一种放松的领域建模架构,由RequestResourceUsecase组成。这个架构是由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;
    }
}

带有RequestResourceUsecase的控制器如下

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

将生成LoginResourceLoginRequestLoginUsecase