datasage/laminas-doctrine-hydration-module

Laminas 框架的 Doctrine 水化器

v5.1.0 2023-01-02 16:00 UTC

README

仓库已弃用

此仓库已更新以支持 PHP 7.4 和 8+,并已转换为使用 Laminas 包。这些升级是为了解决与上游包的依赖问题。

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

Doctrine 水化模块

支持的功能

  • 5.0.x: 升级到 Laminas,需要 PHP 7.4+
  • 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
);

水化器配置

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

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

object_manager

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

by_value

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

use_generated_hydrator

此属性仅用于 mongoDB ODM,将使用生成的水化器而不是 Doctrine 模块水化器。当此选项设置为 true 时,策略将不起作用。

naming_strategy

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

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

strategies

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

filters

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

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

自定义策略

MongoDB ODM

  • DateTimeField: 用于 DateTime 对象
  • DefaultRelation: 保持关系不变。不对字段进行任何修改。
  • EmbeddedCollection: 用于嵌入式集合
  • EmbeddedField: 用于嵌入式字段
  • ReferencedCollection: 用于引用集合
  • ReferencedField: 用于引用字段。
  • EmbeddedReferenceCollection: 这是一个自定义策略,可以在 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

当加湿器执行extract时,服务中的filter($fieldName)函数将被调用,并且正在提取的字段名称将被作为参数传递。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"