api-skeletons/doctrine-orm-hydration-module

用于Laminas的Doctrine ORM hydrator

1.0.3 2022-11-02 01:31 UTC

This package is auto-updated.

Last update: 2024-08-30 01:12:27 UTC


README

Build Status Code Coverage Packagist Downloads

Doctrine Hydration Module

本模块提供了一种可配置的方式来创建新的Doctrine hydrator。通过使用可配置的API,可以轻松地为任何使用情况创建自定义hydrator。

使用了来自 doctrine laminas hydrator 的基本 hydrator。可以为引用实体等复杂对象配置自己的策略。

支持的功能

  • 1.0.x:重写和编辑 phpro/zf-doctrine-hydration-module,需要 PHP 7.4+

安装

添加到 composer.json

composer require api-skeletons/doctrine-orm-hydration-module

添加到应用程序配置

return array(
    'modules' => array(
        'ApiSkeletons\\DoctrineORMHydrationModule',
        // 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,
            '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

此属性用于指定将被 hydrate 的实体类。您需要确保此实体是已映射的 doctrine 类。

object_manager

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

by_value

指定是否要按值或按引用 hydrate 实体。

naming_strategy

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

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

strategies

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

filters

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

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

自定义过滤器

自定义过滤器允许您通过确定哪些字段应被提取来微调 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 工厂将从服务管理器中检索 custom.filter 并将其作为过滤器注入到 hydrator 中。过滤器必须实现 Zend\Hydrator\Filter\FilterInterface

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

覆盖 hydrator

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

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

测试

此软件包使用 Cs fixer 和 PhpUnit 完全测试。MongoDB 测试需要在您的计算机上安装 mongodb。您可以通过在命令中添加 testsuite 来跳过这些测试。

# Php coding standards:
./vendor/bin/phpcs


# Phpunit:
./vendor/bin/phpunit