在Apigility中,可以为每个Hydrator
设置一个Entity
- 通过Apigility UI
或直接在module.config.php
中,例如:
return array(
...
'zf-hal' => array(
'metadata_map' => array(
'Portfolio\\V2\\Rest\\Project\\ProjectEntity' => array(
'entity_identifier_name' => 'id',
'route_name' => 'portfolio.rest.project',
'route_identifier_name' => 'id',
'hydrator' => 'Zend\\Stdlib\\Hydrator\\ObjectProperty',
// 'hydrator' => 'MyNamespace\\Hydrator\\ProjectHydrator',
),
...
),
...
),
...
);
另请参阅documentation。
目前我正在为我的所有实体使用ClassMethods
保湿剂。
现在我尝试将设置更改为自定义保水器。我也尝试了另一种Zend保湿剂。但无论我做什么,只有我在`module.config.php中定义的水合物被忽略。
编辑:它适用于单元实体,但不适用于集合。我用调试器检查了这个,看看:当我收集一个集合时,我的自定义水合器不会被调用。我无法找到,实际上正在使用哪个保温器 - 我设置了断点,甚至在所有保水器的die()
和extract()
方法中写了hydrate()
ArraySerializable
,{ {1}},ClassMethods
,ObjectProperty
以及我的自定义Reflection
),但应用程序根本没有注意到它仍然有效。似乎是这样,根本没有水合作用......
这里有什么问题以及如何让水合设置正常工作?
答案 0 :(得分:0)
为服务定义Entity类时,还可以选择为服务配置Collection实体。您需要将水合器与元数据中的Collection实体相关联。
- (BOOL)intersectsNode:(SKNode *)node
答案 1 :(得分:0)
老但发现了这个: 对于collectionRender,不会调用保湿剂 https://github.com/zfcampus/zf-hal/blob/master/src/Plugin/Hal.php#L570
对于entityRender是: https://github.com/zfcampus/zf-hal/blob/master/src/Plugin/Hal.php#L695
需要为此调用问题。
编辑[16年7月10日]:
我错了。
我的解决方案适用于Apigility 1.3。没有测试早期版本。
您可以使用Zend\\Hydrator\\DelegatingHydrator
'metadata_map' => array(
'Test\\DomainModel\\UseCase\\Query\\ShowTask\\Response\\Task' => array(
'entity_identifier_name' => 'uuid',
'route_name' => 'descriptive-module.rest.task',
'route_identifier_name' => 'task_id',
'hydrator' => 'Zend\\Hydrator\\DelegatingHydrator',
),
'Test\\DomainModel\\UseCase\\Query\\ListTask\\Response\\Task' => array(
'entity_identifier_name' => 'uuid',
'route_name' => 'descriptive-module.rest.task',
'route_identifier_name' => 'task_id',
'hydrator' => 'Zend\\Hydrator\\DelegatingHydrator',
),
第一个,对于实体。 第二个,返回Collection的元素。
然后在module.config.php
中 'hydrators' => array(
'invokables' => array(
\Test\DomainModel\UseCase\Query\ShowTask\Response\Task::class =>
\TestApi\V1\Rest\Task\Hydrator\ShowTaskHydrator::class,
\Test\DomainModel\UseCase\Query\ListTask\Response\Task::class =>
\TestApi\V1\Rest\Task\Hydrator\ListTaskHydrator::class,
),
'factories' => array(),
),
TaskShowHydrator
/ ListTaskHydrator
需要实施Zend\Hydrator\HydratorInterface