【发布时间】:2015-02-16 17:04:10
【问题描述】:
我正在基于Zend Framework 2 开发一个Apigility 驱动的应用程序。
我希望我的应用程序同时为单个项目和列表提供嵌套响应:
/projects/1
{
"id": "1",
"title": "...",
...
"_embedded": {
"images": [
{
"id": "1",
"project_id": "1",
"title": "...",
...
},
{
"id": "2",
"project_id": "1",
"title": "...",
...
}
]
},
...
}
/projects
{
...
"_embedded": {
"projects": [
{
"id": "1",
"title": "...",
...
"_embedded": {
"images": [
{
"id": "1",
"project_id": "1",
"title": "...",
...
},
...
]
},
...
},
...
]
},
"total_items": 2
}
因为我还没有找到一个符合 apigility 的解决方案来实现具有嵌套列表的列表(在这种情况下,项目具有每个项目列表项的图像列表,请参阅 here)。我必须处理Paginator 和DbAdapter 并手动提供page 参数:
class ProjectResource extends AbstractResourceListener {
...
public function fetchAll($params = array()) {
$pageNumber = $this->getEvent()->getRouteMatch()->getParam('page', 1); <-- that doesn't work
$projectService = $this->getProjectService();
$offset = $pageNumber > 0 ? $pageNumber - 1 : 0;
$config = $this->getServiceManager()->get('Config');
$itemCountPerPage = $config['zf-rest']['Portfolio\\V2\\Rest\\Project\\Controller']['page_size'];
$projects = $projectService->getProjects($offset, $itemCountPerPage);
return $projects;
}
...
}
问题是,$this->getEvent()->getRouteMatch()->getParam('page', 1) 不起作用。不是page 参数,而是$this->getEvent()->getRouteMatch()->getParams() 返回
Array
(
[controller] => Portfolio\V2\Rest\Project\Controller
[version] => 2
)
如何访问请求参数?
【问题讨论】:
标签: zend-framework2 http-request-parameters laminas-api-tools