Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Apigility中忽略水合器设置_Php_Zend Framework2_Settings_Laminas Api Tools - Fatal编程技术网

Php 在Apigility中忽略水合器设置

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

在Apigility中,可以通过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',
            ),
            ...
        ),
        ...
    ),
    ...
);
另见

目前我正在为我的所有实体使用水合器

现在我尝试将设置更改为自定义水合器。我还试过另一种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