phpro/zf-doctrine-hydration-module

此包已废弃,不再维护。未建议替代包。

Doctrine hydrators for ZF2 and ZF3

v4.1.0 2019-01-18 05:39 UTC

This package is auto-updated.

Last update: 2024-05-29 11:00:59 UTC


README

仓库已废弃

PHPro 已不再使用 Apigility。因此,我们难以为此包做出正确的决策。我们正在寻找愿意接管此包并能够将其引导到正确方向的人。

你就是这样的人吗?联系我们,我们将讨论如何互相帮助!

请随意使用,我们将不再提供任何支持。

Build status Packagist Downloads

Doctrine Hydration Module

此模块提供了一种可配置的方式创建新的 doctrine hydrators。通过使用可配置的 API,可以轻松创建适用于任何用例的自定义 hydrator。

对于 ORM,使用 doctrine 模块的基本 hydrator。可以配置自己的策略来处理像引用实体这样的复杂对象。

对于 MongoDB ODM,添加了特定的 hydrator。此 hydrator 将能够处理引用文档和嵌入式文档。还可以使用鉴别器映射表对高级文档进行 hydration。

支持的功能

  • 4.0.x: 包含 zend-servicemanager >=3.3.2 支持,需要 PHP 5.6+。
  • 3.0.x: 包含 zend-servicemanager >=3 支持,需要 PHP 5.6+。
  • 2.0.x: 包含 zend-hydrator 支持,需要 PHP 5.6+。
  • 1.0.x: 包含 zend-stdlib <2.7 支持,需要 PHP 5.4+。

确保在正确的分支上提交,以便您的更改能够合并到项目中。

安装

添加到 composer.json

composer require phpro/zf-doctrine-hydration-module

添加到应用配置

return array(
    'modules' => array(
        'Phpro\\DoctrineHydrationModule',
        // other libs...
    ),
    // Other config
);

Hydrator 配置

return array(
    'doctrine-hydrator' => array(
        'hydrator-manager-key' => array(
            'entity_class' => 'App\Entity\EntityClass',
            'object_manager' => 'doctrine.objectmanager.key.in.servicelocator',
            'by_value' => true,
            'use_generated_hydrator' => true,
            'naming_strategy' => 'custom.naming.strategy.key.in.servicemanager',
            'hydrator' => 'custom.hydrator.key.in.hydratormanager',
            'strategies' => array(
                'fieldname' => 'custom.strategy.key.in.servicemanager',
            ),
            'filters' => array(
                'custom_filter_name' => array(
                    'condition' => 'and', // optional, default is 'or'
                    'filter'    => 'custom.hydrator.filter.key.in.servicemanager',
                ),
            ),
        ),
    ),
);

entity_class

此属性用于指定将要进行 hydration 的实体的类。您需要确保此实体是映射的 doctrine 类。

object_manager

您可以指定要用于 hydrator 的对象管理器。值是服务管理器中所需对象管理器的键。

by_value

指定是否希望 hydrator 通过值或通过引用来 hydration 实体。

use_generated_hydrator

此属性仅在 MongoDB ODM 中使用,并将使用生成的 hydrator 而不是 Doctrine 模块 hydrator。当此选项设置为 true 时,策略将不起作用。

naming_strategy

您可以为 hydrator 使用自定义命名策略。指定服务管理器中命名策略的键。请注意,此命名策略需要实现 NamingStrategyInterface

hydrator 您可以使用自定义 hydrator 而不是默认的 DoctrineObject hydrator。确保此 hydrator 实现 HydratorInterface

strategies

您可以自定义特定属性的 hydration 策略。使用服务管理器中的策略键配置要自定义的属性;请注意,此策略需要实现 StrategyInterface

filters

此属性可以用于在 hydrator 上应用过滤器。您可以通过定义服务管理器中过滤器的键和过滤器条件(如 hydrator 过滤器文档中所述)来指定自定义过滤器列表。请注意,此过滤器需要实现 FilterInterface

从现在开始,您可以通过在 HydratorManager 上调用 get('hydrator-manager-key') 来获取 hydrator。

自定义策略

MongoDB ODM

  • DateTimeField: 用于 DateTime 对象
  • DefaultRelation: 保持关系不变。不对字段进行任何修改。
  • 嵌入式集合:用于嵌入式集合
  • 嵌入式字段:用于嵌入式字段
  • 引用集合:用于引用集合
  • 引用字段:用于引用字段。
  • 嵌入式引用集合:这是一种可以用于API中显示引用对象所有字段的自定义策略。加湿功能与常规引用对象相同。
  • 嵌入式引用字段:这是一种可以用于API中显示引用对象所有字段的自定义策略。加湿功能与常规引用对象相同。

自定义过滤器

自定义过滤器允许您通过确定应提取哪些字段来微调加湿器的extract功能的结果。

配置自定义过滤器

return array(
    'doctrine-hydrator' => array(
        'custom-hydrator' => array(
            // other config
            'filters' => array(
                'custom.filter.name' => array(
                    'condition' => 'and', //optional, default: FilterComposite::CONDITION_OR,
                    'filter' => 'custom.filter', // a name in the Service Manager
                ),
            ),
        ),
    ),
);

在此示例配置中,加湿器工厂将从服务管理器检索custom.filter并将其作为过滤器注入到加湿器中。该过滤器必须实现Zend\Hydrator\Filter\FilterInterface

服务中的filter($fieldName)函数将在extract期间由加湿器调用,并将正在提取的字段名作为参数传递。filter()函数必须返回一个真值:如果返回true,则该字段将不会提取。

覆盖加湿器

如果标准DoctrineHydrator不够灵活,您可以设置自定义的hydrator。这允许您使用扩展的DoctrineHydrator或其他现有加湿器,并通过此模块对其进行配置。此设置将覆盖use_generated_hydrator

return array(
    'doctrine-hydrator' => array(
        'custom-hydrator' => array(
            // other config
            'hydrator' => 'Zend\Hydrator\ArraySerializable'
        ),
    ),
);

测试

此包完全通过Cs fixer和PhpUnit进行测试。MongoDB测试需要在您的机器上安装mongodb。您可以通过将testsuite添加到命令中跳过这些测试。

# Php coding standards:
# (The files are loaded according to the PSR-4 standard. The PSR-0 fix will fail!)
./vendor/bin/php-cs-fixer fix . --dry-run  --fixers=-psr0

# Phpunit:
./vendor/bin/phpunit

# Testing one testsuite:
./vendor/bin/phpunit --testsuite="Main"
./vendor/bin/phpunit --testsuite="ODM"