somnambulist/value-object-doctrine-mappings

此包已被弃用且不再维护。作者建议使用 somnambulist/domain 包。

包含在 somnambulist/value-objects 中的值对象映射文件集合

1.5.1 2017-11-03 20:43 UTC

This package is auto-updated.

Last update: 2020-02-03 17:24:45 UTC


README

此仓库已被存档。请更新到合并包。

值对象和枚举的 Doctrine 映射

为 somnambulist/value-objects 库提供了一组基本的映射信息,用于与 Doctrine 一起使用。映射文件适用于 Doctrine (.dcm.yml) 和 Symfony (.orm.yml)。这些映射文件从 symfony 链接到 doctrine。

包含了一个 Bootstrapper,用于自动注册值对象枚举作为 Doctrine 类型。

要求

  • PHP 7+
  • Doctrine ORM 2.5+

安装

使用 composer 安装,或从 github.com/checkout / 拉取文件。

  • composer require somnambulist/value-object-doctrine-mappings

使用

将映射文件复制或链接到您的项目中的 Doctrine 配置。这些文件对于每个实体管理器都是必需的。强烈建议在扩展到您自己的之后,根据需要复制和修改映射。

记住:值对象是您领域模型的一部分,应该谨慎处理。

注意:这些映射中使用了枚举。

注册枚举处理器

要将枚举处理器注册到您的应用程序启动代码中(例如:AppBundle::boot 或 AppServiceProvider::register|boot),请添加以下内容:

Somnambulist\Doctrine\Bootstrapper::registerEnumerations();

这将预注册以下枚举

  • Geography\CountryCode
  • Geography\Srid
  • Measure\AreaUnit
  • Measure\DistanceUnit
  • Money\CurrencyCode

此外,还注册了额外的辅助程序,允许使用 Country 和 Currency 值对象作为枚举。这些枚举值使用 CountryCode 和 CurrencyCode 存储并使用 ::create() 方法恢复。

注册自定义类型

以下包含自定义类型:

  • datetime
  • datetimetz
  • date
  • time
  • json
  • jsonb
  • json_collection

日期类型覆盖了默认的 Doctrine 类型,并使用扩展的 DateTimeImmutable 对象 VO DateTime。

json、jsonb 和 json_collection 相等,允许将 JSON 数据转换为 Collection 对象,而不是普通数组。

要将类型注册到您的应用程序启动代码中,请添加以下内容:

Somnambulist\Doctrine\Bootstrapper::registerTypes();

映射文件

要使用类型和枚举,在您的映射文件中设置适当的类型

fields:
    createdAt:
        type: datetime
    
    attributes:
        type: json

    country:
        type: Somnambulist\ValueObjects\Types\Geography\Country
    
    currency:
        type: Somnambulist\ValueObjects\Types\Money\Currency

要使用值对象

embedded:
    contact:
        class: Somnambulist\ValueObjects\Types\Identity\EmailAddress
        
    homepage:
        class: Somnambulist\ValueObjects\Types\Web\Url

或以 XML 格式

<entity name="My\Entity">
    <embedded name="contact" class="Somnambulist\ValueObjects\Types\Identity\EmailAddress" />
    <embedded name="homepage" class="Somnambulist\ValueObjects\Types\Web\Url" />
</entity>

当使用可嵌入的类型时,请确保已添加必要的映射文件。

为 Symfony 配置类型

在 Symfony 项目中,在 doctrine 部分中添加一个新的映射区域到您的 orm 配置

doctrine:
    # snip ...
    orm:
        mappings:
            App\Entities:
                mapping:   true
                type:      yml
                dir:       '%kernel.project_dir%/config/mappings/entities'
                is_bundle: false
                prefix:    App\Entities

            Somnambulist\ValueObjects\Types:
                mapping:   true
                type:      xml
                dir:       '%kernel.project_dir%/config/mappings/somnambulist'
                is_bundle: false
                prefix:    Somnambulist\ValueObjects\Types

然后,从供应商配置文件夹中复制或创建符号链接到您的项目的映射配置部分适当的配置文件。如果您对字段类型有不同的要求,请相应地复制并更新。建议复制而不是链接映射文件,以避免因本库更改而产生问题。

链接