PHPackages                             pandaxxw/panda-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. pandaxxw/panda-dto

ActiveLibrary

pandaxxw/panda-dto
==================

php传输对象

1.0.2(2y ago)09MITPHPPHP ^7.4|^8.0

Since Nov 22Pushed 2y ago1 watchersCompare

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

READMEChangelogDependencies (1)Versions (2)Used By (0)

panda-dto
=========

[](#panda-dto)

php数据传输对象

安装
--

[](#安装)

```
composer require pandaxxw/panda-dto
```

- **注意**: 要求至少&gt;=PHP 7.4

如何使用
----

[](#如何使用)

```
use App\Models\Author;
use Pandaxxw\Dto\Dto;

class PostData extends Dto
{
    public string $title;

    public string $body;

    public Author $author;
}
```

初始化对象

```
$postData = new PostData([
    'title' => '…',
    'body' => '…',
    'author_id' => '…',
]);
```

现在就可以按对象使用了

```
$postData->title;
$postData->body;
$postData->author_id;
```

```
use App\Models\Author;
use Iterator;
use Pandaxxw\Dto\Dto;

class PostData extends Dto
{
    /**
     * Built in types:
     */
    public string $property;

    /**
     * Imported class or fully qualified class name:
     */
    public Author $property;

    /**
     * Nullable types:
     */
    public ?string $property;

    /**
     * Any iterator:
     */
    public Iterator $property;

    /**
     * No type, which allows everything
     */
    public $property;
}
```

### 集合

[](#集合)

```
use Pandaxxw\Dto\DtoCollection;
class PostCollection extends DtoCollection
{
    public function current(): PostData
    {
        return parent::current();
    }
}
```

通过重写该current方法，将自动完成功能： 然后你可以像这样使用集合：

```
foreach ($postCollection as $postData) {
    $postData->
}

$postCollection[0]->
```

您可以自由地实现自己的静态构造函数：

```
use App\DataTransferObjects\PostData;
use Pandaxxw\Dto\DtoCollection;

class PostCollection extends DtoCollection
{
    public static function create(array $data): PostCollection
    {
        return new static(PostData::arrayOf($data));
    }
}
```

### 自动嵌套 DTO

[](#自动嵌套-dto)

如果您有嵌套的 DTO 字段，则传递到父 DTO 的数据将自动进行转换。

```
use Pandaxxw\Dto\Dto;

class PostData extends Dto
{
    public AuthorData $author;
}
```

`PostData` 现在可以像这样构建:

```
$postData = new PostData([
    'author' => [
        'name' => 'Foo',
    ],
]);
```

### 不可改变的Dto

[](#不可改变的dto)

如果你要某个Dto初始化之后不能更改，可以用它来初始化

```
$postData = PostData::immutable([
    'tags' => [
        ['name' => 'foo'],
        ['name' => 'bar']
    ]
]);
```

如果改变$postData的属性, 将抛 `DtoError`.

### 辅助函数

[](#辅助函数)

```
$postData->all();

$postData
    ->only('title', 'body')
    ->toArray();

$postData
    ->except('author')
    ->toArray();
```

可以用链式调用:

```
$postData
    ->except('title')
    ->except('body')
    ->toArray();
```

注意except和only是不可变的，它们不会改变原始数据传输对象。

### 异常处理

[](#异常处理)

除了属性类型验证之外，您还可以确定整个数据传输对象始终有效。在构造数据传输对象时，我们将验证是否设置了所有必需的（不可为空）属性。如果没有，DtoError将会抛出 a 。

同样，如果您尝试设置未定义的属性，Dto.

### 灵活的数据传输对象

[](#灵活的数据传输对象)

FlexibleDto传输的属性可以为空,可以通过FlexibleDto避免异常。例如：

```
use Pandaxxw\Dto\FlexibleDto;
class PostData extends FlexibleDto
{
    public string $content;
}

// No errors thrown
$dto = new PostData([
    'author' => [
        'id' => 1,
    ],
    'content' => 'panda',
    'created_at' => '2023-01-02',
]);

$dto->toArray(); // ['content' => 'panda']
```

###  Health Score

21

—

LowBetter than 19% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 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

Unknown

Total

1

Last Release

902d ago

### Community

Maintainers

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

---

Top Contributors

[![pandaxxw](https://avatars.githubusercontent.com/u/15356648?v=4)](https://github.com/pandaxxw "pandaxxw (5 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/pandaxxw-panda-dto/health.svg)

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

PHPackages © 2026

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