梦游者 / read-models-bundle
为 somnambulist/read-models 提供的 Symfony 集成
Requires
- php: >=8.1
- somnambulist/read-models: ^4.1
- symfony/framework-bundle: ^6.4|^7.0
Requires (Dev)
- doctrine/doctrine-bundle: ^2.11
- phpunit/phpunit: ^10.5
- somnambulist/domain: ^6.0
- symfony/dotenv: ^6.4
- symfony/messenger: ^6.4
- symfony/stopwatch: ^6.4
- symfony/var-dumper: ^6.4
- symfony/yaml: ^6.4
README
通过包将 read-models 集成到 Symfony 中。
安装
使用 composer 安装,或者从 github.com 检出/拉取文件。
- composer require somnambulist/read-models-bundle
- 将包类添加到
config/bundles.php
作为最后一个包- 注意:如果没有配置为最后一个,则任何自定义 doctrine 类型可能不会被分配给类型转换器,因为 Manager 将太早启动。
- 添加一个配置文件(
config/packages/somnambulist.yaml
)包含配置 - 通过
services.yaml
和标签映射任何自定义转换器 - 创建一些模型
- 加载数据:
<model>::find()
在 config/packages/somnambulist.yaml
中的配置示例可能是
somnambulist_read_models: connections: 'default': 'doctrine.dbal.default_connection' 'App\Models\User': 'doctrine.dbal.user_connection' subscribers: request_manager_clearer: true messenger_manager_clearer: true
有 2 个事件订阅者会自动注册
- 内核请求时清除身份映射,终止
- 消息处理/失败时清除 messenger
如果 messenger 没有安装,监听器将自动禁用。
连接
每种模型类型都可以通过使用完全限定的类名作为键来具有自定义连接。当引用 Doctrine 连接时,确保如果从其他地方复制,不要留下 @
前缀。
注意,如果没有指定默认值,则将自动注册当前配置的 Doctrine 默认值。
添加属性转换器
将属性转换器作为服务添加,并用 somnambulist.read_models.type_caster
标记它们,以便它们自动注册到 Manager
的属性转换器实例。
要使用 attribute-model
通用类型转换器,将它们作为服务添加并按需配置
services: app.type_casters.some_service_identity: class: Somnambulist\Components\AttributeModel\TypeCasters\ExternalIdentityCaster arguments: $providerAttribute: 'some_service_name' $identityAttribute: 'some_service_id' $remove: true $types: - some_service_id tags: ['somnambulist.read_models.type_caster'] app.type_casters.my_value_object: class: Somnambulist\Components\AttributeModel\TypeCasters\SimpleValueObjectCaster arguments: $class: 'App\\Entities\\SomeEntityValueObject' $types: - short_name tags: ['somnambulist.read_models.type_caster']
或者如果您不需要配置,或者有自己的配置;请使用资源
services: App\TypeCasters\: resource: '../../src/TypeCasters/' tags: ['somnambulist.read_models.type_caster']
属性名称应该是数据源中预期值出现的数组键名。例如:如果 Product
模型访问一个具有 unit_value
和 unit_cur
字段的 products
表,则可以使用 MoneyCaster
将其转换为 Money
对象。
services: app.type_casters.product_money_caster: class: Somnambulist\Components\AttributeModel\TypeCasters\MoneyCaster arguments: $amtAttribute: 'unit_value' $curAttribute: 'unit_cur' $remove: true $types: - product_price tags: ['somnambulist.read_models.type_caster']
然后可以在 casts 中引用转换器: 'price' => 'product_price'
,并将 unit_value 和 unit_cur 属性替换为单个 "price" 属性,该属性将是一个 Money 值对象。如果应该保留原始值,请将 $remove
设置为 false
。
可以在任何时候添加额外的转换器;并且可以通过重用现有的类型名称来覆盖现有的转换器,尽管这被劝阻。请注意,一旦注册了类型,就无法删除。
使用方法
有关使用方法的详细信息,请参阅 read-models,有关属性转换器的更多信息,请参阅 attribute-models。