限制 Apigility 中的结果

2024-02-07

我使用 Apigility 创建了一个代码连接 API。现在我正在使用标准创建存根。在我的PostResource有一种方法叫做fetchAll($params = array())。 我为该方法创建了代码,以便它返回一组可分页的结果:

/** @var HydratorInterface $hydrator */
$hydrator = new \Zend\Stdlib\Hydrator\ClassMethods();

/** @var PostService $postService */
$postService = new PostService();

$posts = $postService->findAll(/* Limit, default 10 */);
$apiData = array();
foreach ($posts as $post) {
    $apiData[] = $hydrator->extract($post);
}
return new Paginator(new ArrayAdapter($apiData));

到目前为止效果很好。如果我导航到 API URL,我将得到一个分页的json我的数据库数据的表示。如果我将 API 的页面大小设置为 5。它将提供 2 个页面和 5 个结果。到目前为止,一切都很好。问题是,每次调用(第 1 页或第 2 页)时,都会从数据库中获取所有 10 个结果。它在一页上只返回 5 个,但 10 个是水合的等等。

有没有办法使用限制,同时让 Apigility 或分页器知道总共有多少结果,以便我可以获得 5 行并且仍然分页?


我不确切知道您如何检索数据,但是以下方法可以按预期工作:调用链看起来像AddressResource#fetchAll(...) -> AddressService#getBar(...) -> AddressMapper#findAll(...)数据检索方法返回一个Collection object.

AddressResource.php

...

class AddressResource ... {

    ...

    public function fetchAll($params = array()) {
        $service = $this->getAddressService();
        $collection = $service->getAddresses($params->toArray());
        return $collection;
    }

    ...

}

AddressService.php

...

class AddressService ... {

    ...

    public function getAddresses($params = array()) {
        $collection = $this->getMapper()->findAll($params);
        return $collection;
    }

    ...

}

AddressMapper.php

...

class AddressMapper extends AbstractDbMapper {

    ...

    public function findAll($params = array()) {
        $select = $this->getSelect();
        $select->where(
            ...
        );
        $paginatorAdapter = $this->createPaginationAdapter($select);
        $collection = new AddressCollection($paginatorAdapter);
        return $collection;
    }

    ...

}

AddressCollection.php

...

use Zend\Paginator\Paginator;

class AddressCollection extends Paginator {
}

module.config.php

return array(
    ...
    'zf-rest' => array(
        ...
        'AddressBookAPI\\V1\\Rest\\Address\\Controller' => array(
            ...
            'page_size' => 5,
            ...
        ),
        ...
    ),
    ...
);

现在测试:我正在打电话/addresses并观察MySQL查询日志:

$ tail -f /var/log/mysql_query.log

...

3 Connect   root@localhost on address-book-api
3 Query     SET NAMES 'UTF8'
3 Query     SELECT COUNT(1) AS `C` FROM (SELECT `addresses`.* FROM `addresses`) AS `original_select`
3 Query     SELECT `addresses`.* FROM `addresses` LIMIT 5 OFFSET 0
3 Quit

...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

限制 Apigility 中的结果 的相关文章

随机推荐

  • Promise.then 作业执行顺序

    规范说 https www ecma international org ecma 262 7 0 index html sec jobs and job queues 第 5 段 来自单个作业队列的 PendingJob 记录始终在 先进
  • html 脚本 src="" 用按钮触发重定向

    我有以下用于登录的 login html 页面位于设计文件夹中 h3 Login h3
  • std::copy 和 std::vector 问题

    我明白为什么这会导致段错误 include
  • 保护 Linux Web 服务器的公共访问

    我想设置一个便宜的 Linux 机器作为 Web 服务器来托管各种 Web 技术 我想到了 PHP 和 Java EE 但我将来也想尝试使用 Ruby 或 Python 我相当精通设置 Tomcat 在 Linux 上运行以提供 Java
  • UILineBreakMode 与 NSLineBreakMode

    我看到一些 UIStringDrawing 方法已更新为使用 NSLineBreakMode 而不是 iOS 6 0 中的 UILineBreakMode E g CGSize sizeWithFont UIFont font constr
  • 原型继承最佳实践?

    我刚刚接触 JavaScript 并试图了解原型继承 似乎有多种方法可以达到相同的效果 所以我想看看是否有任何最佳实践或理由以一种方式做事而不是另一种方式 这就是我要说的 Method 1 function Rabbit this name
  • 2页出现死锁

    我正在解决在生产环境中看到的一些死锁 我对此很陌生 但有些事情对我来说似乎很奇怪 所以我有下面的死锁图 死锁的右侧是更新 如下所示 UPDATE order sub line SET sub line status 300 WHERE or
  • 从 C# 调用方中的非托管 DLL 捕获标准输出

    我有一个 C 应用程序通过一些 C CLI 编组代码调用本机 C DLL C gt C CLI gt C 无 CLR 我希望 DLL 在运行时将字符串更新发送回调用应用程序 目前 非托管 DLL 将输出写入 stdout 本质上我需要在 U
  • AngularJs 将 HTML 中每个 ng-repeat 的实例传递给指令

    我认为这应该很简单 但我错过了一些东西 我怎样才能通过flowObj in my ng repeat下面是我的指令 我想将它传递给我的指令 然后单击 使用它FlowObj 然后应用一些逻辑 我尝试在我的指令中使用注释代码 scope tes
  • Ruby:为什么我不能创建新文件?

    我正在尝试创建一个 json 文件并写入它 我的代码如下所示 def save as json object f File new file json f puts object to json w f close end save as
  • android-support-v4 删除未使用的类

    实际上 我正在尝试将应用程序的 apk 缩小到尽可能小的大小 我目前导入了 android support v4 jar 文件 我的问题是 如何从此 jar 文件中删除未使用的类 经过一番搜索后没有找到任何信息 如果 ProGuard 是解
  • 如何使用 Salt 创建 SHA256 哈希?

    我目前正在开发一个 Visual Studio C Windows 窗体项目 但是 我对 SHA256 salted 的工作原理感到困惑 我在网上找到了一些例子 但无法理解如何调用这个函数 我想在连接到数据库 Microsoft Acces
  • 如何在 ag-grid 表的页脚中启用或显示总行数

    我正在使用 Ag Grid 表 我想在表的页脚中显示总行 我如何通过使用 2 个表来实现它 第 1 个表用于实际数据 第 2 个表用于总计行 它与普通的不可滚动表格一起工作正常 但如果它是固定或可滚动表格 则顶部表格会滚动 但底部表格会粘在
  • 在 HashMap 或 LinkedList 中将嵌套类设为静态的原因是什么? [复制]

    这个问题在这里已经有答案了 在大多数情况下 我看到嵌套类是static 让我们举个例子Entry上课于HashMap static class Entry
  • Protractor browser.wait 不等待

    我假设 browser wait 应该是一个阻塞调用 但它没有按我的预期工作 这是我的样本 describe browser wait function beforeEach function browser wait function c
  • 问题:使用 Windows 7,运行我的应用程序时出现未经授权的访问异常

    我的应用程序引发未经授权的访问错误 运行我的应用程序时 我尝试访问以下位置的目录 Application UserAppDataPath 问题 它说我无权访问 Application UserAppDataPath 目录 有没有办法在我的应
  • pyqtgraph:同步不同图中轴的缩放

    我想同步几个 pyqtgraph 图的 X 轴 当用户通过鼠标交互重新缩放 X 轴时 例如 鼠标在 x 轴上时滚动滚轮 我想将相同的更改分配给所有其他绘图 那么我该怎么做呢 我从下面的基本示例中导出了最小化代码 我是否必须覆盖viewRan
  • 在 html 表 中将单行加粗 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我使用以下
  • 来自 iOS 的 Instagram 签名 API 调用

    对 Instagram 帖子方法进行签名 API 调用以关注用户 点赞用户的图像等 用户每小时的关注次数限制为 20 次 但如果我们进行签名 API 调用 那么用户每小时可以进行 60 次关注 但我的问题是如何进行签名 API 调用 我尝试
  • 限制 Apigility 中的结果

    我使用 Apigility 创建了一个代码连接 API 现在我正在使用标准创建存根 在我的PostResource有一种方法叫做fetchAll params array 我为该方法创建了代码 以便它返回一组可分页的结果 var Hydra