Php 在Apigility中忽略水合器设置
在Apigility中,可以通过Apigility UI为每个Php 在Apigility中忽略水合器设置,php,zend-framework2,settings,laminas-api-tools,Php,Zend Framework2,Settings,Laminas Api Tools,在Apigility中,可以通过Apigility UI为每个实体设置或 或者直接在module.config.php中,例如: return array( ... 'zf-hal' => array( 'metadata_map' => array( 'Portfolio\\V2\\Rest\\Project\\ProjectEntity' => array( 'entity_ident
实体设置或
或者直接在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',
),
...
),
...
),
...
);
另见
目前我正在为我的所有实体使用水合器
现在我尝试将设置更改为自定义水合器。我还试过另一种Zend水合器。但无论我做什么,只有我在`module.config.php中定义的水合水被忽略
编辑:它适用于单个实体,但不适用于集合。我已经用调试器检查了这一点,并看到:当我重新设置集合时,我的自定义调试器不会被调用。我无法确定实际使用的水合器是哪一种——我设置了断点,甚至在所有水合器的extract()
和hydrate()
方法中编写了die()
s(ArraySerializable
,ClassMethods
,ObjectProperty
,Reflection
,以及我的自定义ProjectHydrator
),但应用程序根本没有注意到这一点,并且仍然在工作。看起来,根本没有水合作用
这里有什么问题以及如何使水合设置正常工作?当您为服务定义实体类时,您还可以选择为服务配置集合实体。您需要将水合器与元数据中的集合实体相关联
return [
'zf-rest' => [
'Portfolio\\V2\\Rest\\Project\\Controller' => [
// other config
'entity_class' => 'Portfolio\\V2\\Rest\\Project\\ProjectEntity',
'collection_class' => 'Portfolio\\V2\\Rest\\Project\\ProjectCollection',
]
],
'zf-hal' => [
'metadata_map' => [
'Portfolio\\V2\\Rest\\Project\\ProjectEntity' => [
// other config
'hydrator' => 'MyNamespace\\Hydrator\\ProjectHydrator'
],
'Portfolio\\V2\\Rest\\Project\\ProjectCollection' => [
// other config
'hydrator' => 'MyNamespace\\Hydrator\\ProjectCollectionHydrator'
]
]
]
]
古老但却发现了这一点:
对于collectionRender,未调用水合器
对于entityRender是:
我们需要为这个问题打电话
编辑[07.10.16]:
我错了
我的解决方案使用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',
),
第一个是实体。
第二,返回集合的元素
然后在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