这个问题现在困扰我一段时间了。为了测试它,我刚刚安装了一个新的Apigility,设置了db(PDO:mysql)并添加了一个DB-Connected服务。在表格中我有40多条记录。当我发出GET收集请求时,响应看起来没问题(使用默认的HAL内容协商)。然后我将内容协商更改为JSON。现在当我发出GET收集请求时,我的响应只包含10个元素。
所以我的问题是:我在哪里设置/更改此限制?
答案 0 :(得分:1)
您可以手动设置页面大小,如下所示:
$paginator = $this->getAlbumTable()->fetchAll(true);
// set the current page to what has been passed in query string, or to 1 if none set
$paginator->setCurrentPageNumber((int) $this->params()->fromQuery('page', 1));
// set the number of items per page to 10
$paginator->setItemCountPerPage(10);
http://framework.zend.com/manual/current/en/tutorials/tutorial.pagination.html
答案 1 :(得分:0)
请你在json输出的末尾发送page_size,total_items部分吗?
就像:
"page_count": 140002,
"page_size": 25,
"total_items": 3500035,
"page": 1
答案 2 :(得分:0)
这不是一个理想的修复方法,因为它要求您使用源代码而不是使用UI中提供的页面大小。
通过DB-Connected样式为您自动生成的集合类派生自Zend / Paginator / Paginator。此类定义$ defaultItemCountPerPage静态受保护成员,默认为10.这就是为什么您只获得10个结果。如果您为实体打开自动生成的集合类并在其他空类中添加:protected static $defaultItemCountPerPage = 100;
,您将看到现在响应中最多可获得100个结果。您可以查看可在派生类中替换的其他Paginator类变量和方法,以获得所需的行为。
这不是一个理想的解决方案。我更喜欢生成的代码自动使用与HalJson策略使用的相同的混合页面大小。也许我会贡献一个PR来改变它。或者,也许我只是使用HalJson方法。这似乎是更好的方式。您应该限制一次从数据库加载的数据量,以便不会有过长的运行查询或者您需要处理的过多的数据集。而且,无论你设定什么限制,当你达到这个限制时你会做什么?使用简单的Json方法,您无法获得"第2页"数据的。因此,如果您要处理大量数据,最好使用HalJson,然后在客户端使用一些逻辑来根据需要一次抓取数据页。返回的JSON结构有点复杂,但并非如此。
我可能和你在同一个地方 - 我试图做一个简单的小api玩,同时保持一切简单,所以我不希望客户必须处理HalJson中的其他内容,但可能更好地处理这种复杂性,并且如果您要使用一些真实的数据集,则可以顺畅地浏览数据。至少,那是我现在给自己的鼓舞人心的话题。 :-)