noc-med/zf-doctrine-hydration-module

Doctrine 为 ZF2 提供的 hydrator

0.1.5 2015-01-16 06:13 UTC

This package is not auto-updated.

Last update: 2024-09-24 04:06:59 UTC


README

Build status

Doctrine Hydration 模块

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

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

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

#安装

添加到 composer.json

"phpro/doctrine-hydration-module": "dev-master"

添加到应用程序配置

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',
                ),
            ),
        ),
    ),
);

use_generated_hydrator 仅与 MongoDB ODM 一起使用,并将使用生成的 hydrator 代替 Doctrine 模块 hydrator。当此选项设置为 true 时,策略将不起作用。

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

自定义策略

MongoDB ODM

  • DateTimeField:用于 DateTime 对象
  • DefaultRelation:保留关系不变。不对该字段进行任何修改。
  • EmbeddedCollection:用于嵌入集合
  • EmbeddedField:用于嵌入字段
  • ReferencedCollection:用于引用集合
  • ReferencedField:用于引用字段。
  • EmbeddedReferenceCollection:这是一个可以在 API 中使用以显示引用对象中所有字段的自定义策略。hydration 的工作方式与常规引用对象相同。
  • EmbeddedReferenceField:这是一个可以在 API 中使用以显示引用对象中所有字段的自定义策略。hydration 的工作方式与常规引用对象相同。

自定义过滤器

自定义过滤器允许您通过确定哪些字段应该被提取来微调 hydrator 的 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
                ),
            ),
        ),
    ),
);

在此示例配置中,hydrator 工厂将从 Service Manager 中检索 custom.filter 并将其作为过滤器注入到 hydrator 中。过滤器必须实现 Zend\Stdlib\Hydrator\Filter\FilterInterface

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

覆盖 hydrator

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

return array(
    'doctrine-hydrator' => array(
        'custom-hydrator' => array(
            // other config
            'hydrator' => 'Zend\Stdlib\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"