承接 juampi92/phpstan-eloquent-bounded-context 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

juampi92/phpstan-eloquent-bounded-context

最新稳定版本:v1.1

Composer 安装命令:

composer require juampi92/phpstan-eloquent-bounded-context

包简介

PHPStan rules that make sure your models are only being mutated from within its Domain.

README 文档

README

A set of PHPStan rules to make sure your models are only being mutated from within their Domains.

Latest Version on Packagist GitHub Tests Action Status Total Downloads

Description

These rules will detect when your Eloquent Model is being mutated outside of its Domain. The moment the Model leaves the Domain namespace, it becomes read-only.

Let's assume the following structure:

📁 app
├─ 📁 Http
│  └─ 📁 Controllers
│     └─ 📃 PostController.php
└─ 📁 Domains
   └─ 📁 Posts
      └─ 📁 Actions
         └─ 📃 CreatePostAction.php
      └─ 📁 Models
         └─ 📃 Post.php
         └─ 📃 Comment.php

If app/Http/Controllers/PostController.php has the following method:

public function store(Request $request)
{
    $post = new Post($request->validated());
    $post->save();
}

PHPStan will fail saying:

 ---------------------------------------------------------------------------
  app/Http/Controllers/PostController.php
 ---------------------------------------------------------------------------
  Calling 'save' on 'App\Models\Post' outside of its Domain is not allowed.
 ---------------------------------------------------------------------------

To fix this error, instead of calling save inside the Controller directly, create an Action inside the Post domain (or a PostService class) and use that class to create and persist the model.

This package will also detect:

  • Model attribute mutations like: $post->title = 'My title';,
  • Methods persist the data in the database, like save, update, delete, etc,
  • Static methods that persist the data, like ::create(), ::updateOrCreate(), etc.

Installation

To use this extension, require it in Composer:

composer require --dev juampi92/phpstan-eloquent-bounded-context

If you also install phpstan/extension-installer then you're all set!

Manual installation

If you don't want to use phpstan/extension-installer, include extension.neon in your project's PHPStan config:

includes:
    - vendor/juampi92/phpstan-eloquent-bounded-context/extension.neon

Configuration

No configuration

If your models are placed inside their Domain folder, the package will know they are not using Laravel's default folders, and assume the domain is App/Domains/Posts. Any class inside that domain is allowed to mutate an eloquent model.

📁 app
├─ 📁 Domains
│  └─ 📁 Posts
│  |  └─ 📁 Actions
│  |  └─ 📁 Repositories
│  |  └─ 📁 Models ✅
│  |     └─ 📃 Post.php
│  |     └─ 📃 Comment.php
│  └─ 📁 Users
│     └─  ...
└── ...

Manual configuration

If your models are placed inside App\Models, then you will have to configure your domain manually. To do so, you must first create a configuration file that holds the information about your models and domains:

domains:
  -
    namespace: App\Domain\Posts
    models:
      - App\Models\Post
      - App\Models\Comment
  -
    namespace: App\Domain\Users
    models:
      - App\Models\User
      - App\Models\UserProfile

And after you must reference this file inside the phpstan.neon.dist config:

parameters:
	eloquentBoundedContextConfigFiles:
	    - app/Domain/domains.yml

Configuring ignored namespaces

You might want to ignore some namespaces and allow Models to be modified there.

parameters:
	eloquentBoundedContextConfigFiles:
		- app/Domain/domains.yml
	eloquentBoundedContextIgnoredNamespaces:
		- Database\Factories
		- Tests

Contribute

Features to do:

  • Ignore no-configuration resolution when a config is used.
  • Propose /** @mutates */ tag or #Attribute to prohibit these methods being called outside of the domain.

Testing

./vendor/bin/phpunit

Credits

License

The MIT License (MIT). Please see License File for more information.

统计信息

  • 总下载量: 8
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-09-26

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固