gpslab / payload
用于创建有效负载消息的简单基础设施组件
v1.1.0
2017-07-11 09:59 UTC
Requires
- php: >=5.5.0
Requires (Dev)
- gpslab/cqrs: ~1.0
- gpslab/domain-event: ~1.6
- phpunit/phpunit: ~4.8
- satooshi/php-coveralls: ^1.0
- scrutinizer/ocular: ~1.3
- symfony/serializer: ~2.3|~3.0
This package is auto-updated.
Last update: 2024-08-29 04:31:23 UTC
README
用于创建有效负载消息的简单基础设施组件
安装
使用 Composer 非常简单,运行
composer require gpslab/payload
用法
此库自动用有效负载数据填充对象的属性。
例如,创建一个简单的消息
class SimpleMessage extends PayloadMessage { public $id = 0; public $name = ''; }
填充消息
$message = new SimpleMessage([ 'id' => 123, 'name' => 'foo', ]); $message->id; // 123 $message->name; // foo $message->payload(); // ['id' => 123, 'name' => 'foo']
注意
在有效负载中指定的所有字段都必须存在。
受保护属性
您可以使用受保护属性来存储数据。将属性设置为只读非常方便。
class SimpleMessage extends PayloadMessage { protected $id = 0; protected $name = ''; public function id() { return $this->id; } public function name() { return $this->name; } }
填充消息
$message = new SimpleMessage([ 'id' => 123, 'name' => 'foo', ]); $message->id(); // 123 $message->name(); // foo $message->payload(); // ['id' => 123, 'name' => 'foo']
注意
要填充私有属性,您必须使用设置器。
属性设置器
您可以将属性标记为私有并使用设置器来填充它。这将确保数据的安全并控制其类型。您可以将设置器标记为受保护的,以防止从外部更改类。
class SimpleMessage extends PayloadMessage { private $id = 0; private $name = ''; public function id(): integer { return $this->id; } protected function setId(integer $id) { $this->id = $id; } public function name(): string { return $this->name; } protected function setName(string $name) { $this->name = $name; } }
填充消息
$message = new SimpleMessage([ 'id' => 123, 'name' => 'foo', ]); $message->id(); // 123 $message->name(); // foo $message->payload(); // ['id' => 123, 'name' => 'foo']
CQRS
您可以在 CQRS 基础设施中使用有效负载。
重命名联系人的命令
class RenameContactCommand extends PayloadCommand { public $contact_id = 0; public $new_name = ''; }
通过身份获取联系人的查询
class ContactByIdentityQuery extends PayloadQuery { public $id = 0; }
领域事件
您可以在 领域事件 中使用有效负载。
事件,联系人已被重命名
class RenamedContactEvent extends PayloadDomainEvent { public $contact_id = 0; public $old_name = ''; public $new_name = ''; }
序列化
您可以使用 Symfony 序列化器 组件来序列化消息。为此,您可以使用 PayloadNormalizer
或 TypedPayloadNormalizer
,并将结果编码为 JSON、XML、YAML、CSV 等。
PayloadNormalizer
- 只能用于一个类,因为它不区分消息;TypedPayloadNormalizer
- 在标准化数据中添加了从MessageTypeResolver
服务接收到的消息类型。
您可以使用 ClassNameMessageTypeResolver
作为简化解析器。它使用类名的最后一部分作为消息类型。
\Acme\Demo\SomeMessage
转换为SomeMessage
\Acme_Demo_SomeMessage
转换为SomeMessage
小心使用此解析器,并确保在不同命名空间中不要命名消息类相同。
许可证
此软件包受 MIT 许可证 的约束。请参阅文件 LICENSE 中的完整许可证。