我是Zend框架的新手,并尝试使用HAL进行API响应生成。以下是我遇到的问题的简单情况。
课程:
class Version
{
protected $data;
public function __construct($ar){
$data = $ar;
}
public function getArrayCopy(){
return $data;
}
}
$obj = new version(['major'=>1,'minor'=>2,'fix'=>3]);
当我用水合器进行测试时,它可以按以下方式正常工作:
use Zend\Hydrator\ArraySerializableHydrator;
$hydrator = new ArraySerializableHydrator();
$data = $hydrator->extract($obj);
print_r($data); // outputs ['major'=>1,'minor'=>2,'fix'=>3]
我的HAL配置如下:
MetadataMap::class => [
[
'__class__' => RouteBasedResourceMetadata::class,
'resource_class' => Version::class,
'route' => 'version',
'extractor' => ArraySerializableHydrator::class,
],
]
我在Zend表现力(版本3)请求处理程序中使用以下行
$resource = $this->resourceGenerator->fromObject($obj, $request);
$res = $this->responseFactory->createResponse($request, $resource);
链接已正确生成,但是元数据(版本信息)为空。任何帮助都感激不尽。
N.B .:我的实际代码很复杂,在这里我试图生成此问题的一个简单版本。
答案 0 :(得分:0)
我认为在生成响应时会调用hydrate方法。因此,您的测试似乎无法测试您打算测试的内容。
在水合时,水合器可与ReflectionClass一起使用。因此,您需要将$ data中的索引添加为Version类中的属性。
例如
class Version
{
protected $major;
protected $minor;
protected $fix;
public function __construct($data){
foreach($data as $key => $value) {
$this->{$key} = $value;
}
}
public function getArrayCopy(){
return [
'major' => $this->major,
'minor' => $this->minor,
'fix' => $this->fix
];
}
}
$obj = new version(['major'=>1,'minor'=>2,'fix'=>3]);