【发布时间】:2015-09-14 05:05:09
【问题描述】:
我正在构建一个 API,但在尝试向结果集中添加其他数据时遇到了困难。
我在从 ActiveControler 扩展的类中使用 ActiveDataProvider 来获取和返回结果集是 JSON。它运行良好,无需任何工作即可包含分页标题。
$provider = new \yii\data\ActiveDataProvider([
'query' => Message::find()->where(['location_id' => $id])
]);
return $provider;
但是,如果我首先获得结果以便添加新值,则不再将分页标头发送回客户端。
$provider = new \yii\data\ActiveDataProvider([
'query' => Message::find()->where(['location_id' => $id])
]);
$messages['messages'] = $provider->getModels();
$messages['additional_stuff'] = ['field1' => 'foo', 'field2' => 'bar'];
return $messages;
我可能希望输出的示例如下:
{
"messages": [
{
"id": "1",
"content": "message 1"
},
{
"id": "2",
"content": "message 2"
},
],
"additional_stuff": {
"field1": "foo",
"field2": "bar"
}
}
如何在此处添加其他值但确保发送分页标头?
编辑:
感谢 devOp 的回复,我能够根据需要添加标题。我的操作现在看起来像这样:
$provider = new \yii\data\ActiveDataProvider([
'query' => Message::find()->where(['location_id' => $id])
]);
$messages['messages'] = $provider->getModels();
$messages['additional_stuff'] = ['field1' => 'foo', 'field2' => 'bar'];
$this->sendPaginationHeaders($provider->getHeaders());
return $messages;
在我的新方法中调用:
protected function sendPaginationHeaders($pagination)
{
$pageCount = $pagination->totalCount <= $pagination->getPageSize() ? 1 : ceil($pagination->totalCount / $pagination->getPageSize());
header('X-Pagination-Current-Page: '. $pagination->getPage());
header('X-Pagination-Page-Count: '. $pageCount);
header('X-Pagination-Per-Page: '. $pagination->getPageSize());
header('X-Pagination-Total-Count: '. $pagination->totalCount);
}
添加了标准的 Yii2 分页标题。不幸的是 getHeaders() 没有给我 Page-Count 但很容易从其他人那里计算出来。
【问题讨论】:
-
$pagination = $dataProvider->pagination; $pageCount = $pagination->getPageCount(); yiiframework.com/doc/api/2.0/…