foleon / doctrine-orm-hydration-module
Laminas 的 Doctrine ORM 持久化器
Requires
- php: ^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0
- doctrine/doctrine-laminas-hydrator: ^2.1 || ^3.0 || ^4.0
- doctrine/doctrine-module: ^4.1 || ^5.1
Requires (Dev)
- doctrine/doctrine-orm-module: ^3.2 || ^5.1
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.5
This package is not auto-updated.
Last update: 2024-09-17 21:36:12 UTC
README
Doctrine 持久化模块
此模块提供了一种可配置的方式来创建新的 doctrine 持久化器。通过使用可配置的 API,可以轻松为任何使用场景创建自定义持久化器。
使用 doctrine laminas 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 );
持久化器配置
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
此属性用于指定将被持久化的实体类。您需要确保此实体是已映射的 doctrine 类。
object_manager
您可以指定要用于持久化器的对象管理器。该值是服务管理器中所需对象管理器的键。
by_value
指定是否要按值或按引用对实体进行持久化。
naming_strategy
您可以为持久化器使用自定义命名策略。指定服务管理器中命名策略的键。注意,此命名策略需要实现 NamingStrategyInterface
。
hydrator
您可以使用自定义持久化器而不是默认的 DoctrineObject
持久化器。请确保此持久化器实现了 HydratorInterface
。
strategies
您可以根据策略自定义特定属性的持久化策略。使用服务管理器中的策略键配置要自定义的属性;注意,此策略需要实现 StrategyInterface
。
filters
此属性可以用于在持久化器上应用过滤器。您可以通过定义服务管理器中的过滤器键和过滤器条件(如 hydrator 过滤器文档中所述)来指定自定义过滤器列表。注意,此过滤器需要实现 FilterInterface
。
从此处开始,您可以通过在 HydratorManager 上调用 get('hydrator-manager-key')
来获取持久化器。
自定义过滤器
自定义过滤器允许您通过确定哪些字段应该被提取来微调持久化器 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 或其他现有持久化器,并使用此模块进行配置。
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