PHPackages                             wayhood/hyperf-dto - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. wayhood/hyperf-dto

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

wayhood/hyperf-dto
==================

php hyperf dto

v3.0.0(4y ago)0161MITPHPPHP &gt;=8.0

Since Jun 29Pushed 4y agoCompare

[ Source](https://github.com/wayhood/dto)[ Packagist](https://packagist.org/packages/wayhood/hyperf-dto)[ RSS](/packages/wayhood-hyperf-dto/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (13)Versions (13)Used By (1)

PHP Swagger Api Docs
--------------------

[](#php-swagger-api-docs)

基于 [Hyperf](https://github.com/hyperf/hyperf) 框架的 DTO 类映射

##### 优点

[](#优点)

- 请求参数映射到PHP类
- 代码可维护性好，扩展性好
- 支持数组，递归，嵌套
- 支持框架数据验证器

##### 缺点

[](#缺点)

- 模型类需要手工编写

注意
--

[](#注意)

> php &gt;= 8.0

安装
--

[](#安装)

```
composer require tangwei/dto

```

使用
--

[](#使用)

### 1. 使用

[](#1-使用)

注解
--

[](#注解)

> 命名空间:`Hyperf\DTO\Annotation\Contracts`

#### RequestBody

[](#requestbody)

- 获取Body参数

```
public function add(#[RequestBody] DemoBodyRequest $request){}
```

### RequestQuery

[](#requestquery)

- 获取GET参数

```
public function add(#[RequestQuery] DemoQuery $request){}
```

### RequestFormData

[](#requestformdata)

- 获取表单请求

```
public function fromData(#[RequestFormData] DemoFormData $formData){}
```

- 获取文件(和表单一起使用)

```
#[ApiFormData(name: 'photo', type: 'file')]
```

- 获取Body参数和GET参数

```
public function add(#[RequestBody] DemoBodyRequest $request, #[RequestQuery] DemoQuery $query){}
```

> 注意: 一个方法，不能同时注入RequestBody和RequestFormData

示例
--

[](#示例)

### 控制器

[](#控制器)

```
#[Controller(prefix: '/demo')]
#[Api(tags: 'demo管理', position: 1)]
class DemoController extends AbstractController
{
    #[ApiOperation(summary: '查询')]
    #[PostMapping(path: 'index')]
    public function index(#[RequestQuery] #[Valid] DemoQuery $request): Contact
    {
        $contact = new Contact();
        $contact->name = $request->name;
        var_dump($request);
        return $contact;
    }

    #[PutMapping(path: 'add')]
    public function add(#[RequestBody] DemoBodyRequest $request, #[RequestQuery] DemoQuery $query)
    {
        var_dump($query);
        return json_encode($request, JSON_UNESCAPED_UNICODE);
    }

    #[PostMapping(path: 'fromData')]
    public function fromData(#[RequestFormData] DemoFormData $formData): bool
    {
        $file = $this->request->file('photo');
        var_dump($file);
        var_dump($formData);
        return true;
    }

    #[GetMapping(path: 'find/{id}/and/{in}')]
    public function find(int $id, float $in): array
    {
        return ['$id' => $id, '$in' => $in];
    }

}
```

验证器
---

[](#验证器)

### 基于框架的验证

[](#基于框架的验证)

> 安装hyperf框架验证器[hyperf/validation](https://github.com/hyperf/validation), 并配置(已安装忽略)

- 注解 `Required` `Between` `Date` `Email` `Image` `Integer` `Nullable` `Numeric` `Url` `Validation`
- 校验生效

> 只需在控制器方法中加上 #\[Valid\] 注解

```
public function index(#[RequestQuery] #[Valid] DemoQuery $request){}
```

```
class DemoQuery
{
    public string $name;

    #[Required]
    #[Integer]
    #[Between(1,5)]
    public int $num;
}
```

- Validation

> rule 支持框架所有验证

- 自定义验证注解

> 只需继承`Hyperf\DTO\Annotation\Validation\BaseValidation`即可

```
#[Attribute(Attribute::TARGET_PROPERTY)]
class Image extends BaseValidation
{
    protected $rule = 'image';
}
```

注意
--

[](#注意-1)

```
    /**
     * 需要绝对路径.
     * @var \App\DTO\Address[]
     */
    #[ApiModelProperty('地址')]
    public array $addressArr;
```

- 映射数组类时,`@var`需要写绝对路径
- 控制器中使用了框架`AutoController`注解,只收集了`POST`方法

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~20 days

Total

11

Last Release

1469d ago

Major Versions

v0.3.0 → v1.0.02021-10-28

v1.0.3 → 2.0.x-dev2022-03-10

v2.0.0-beta1 → v3.0.02022-05-07

### Community

Maintainers

![](https://www.gravatar.com/avatar/c1ec384043dc1c9dc6666c017a0404e06716ece7dbef992047e1c83741c649bc?d=identicon)[wayhood](/maintainers/wayhood)

---

Top Contributors

[![tw2066](https://avatars.githubusercontent.com/u/24579418?v=4)](https://github.com/tw2066 "tw2066 (60 commits)")

---

Tags

dtohyperfhyperf dtohyperf swagger

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/wayhood-hyperf-dto/health.svg)

```
[![Health](https://phpackages.com/badges/wayhood-hyperf-dto/health.svg)](https://phpackages.com/packages/wayhood-hyperf-dto)
```

###  Alternatives

[tangwei/dto

php hyperf dto

21131.5k2](/packages/tangwei-dto)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
