【问题标题】:Slim Framework Pagination超薄框架分页
【发布时间】:2015-11-06 00:23:00
【问题描述】:

您好,我正在使用 Slim 框架和 PDO 连接,并且遇到了一个大问题(对我来说)。我想用 eloquent orm 切换,而不是正常的尝试和捕捉 PDO,但 45% 已经在我的项目中完成。所以这是我到目前为止的示例代码

$app->get('/data', function () use ($app) {
    try {
        $data = $stmt->query("SELECT * FROM tableName");
    } catch(PDOException $e) {
        die('Error.');
    }
    $app->render('data.html', array(
            'data' => $data
        ));
});

如何使用纤薄的框架进行分页?这个问题有方法解决吗?谢谢!

【问题讨论】:

    标签: php pdo pagination slim


    【解决方案1】:

    如何使用 slim 框架进行分页?

    您可能可以使用 Zend Paginator http://framework.zend.com/manual/2.3/en/modules/zend.paginator.usage.html 。请参阅@mwop 自己的 Paginator 类以及他是如何做到这一点的https://github.com/weierophinney/mwop.net/blob/266eea772717f681936d06425e85bc008a22b6e8/src/Blog/PdoPaginator.php

    还有一个 https://github.com/whiteoctober/Pagerfanta 。您可以尝试其中一种。

    关于迁移到 Eloquent 的问题,由您决定。

    谢谢

    【讨论】:

      【解决方案2】:

      您可以为您的路线提供一些参数 - 我不确定 Slim2 中的当前语法,所以我将使用 GET 参数来解释这一点。

      /data

      没有设置分页参数,所以这将是第一页 - 提供默认参数。

      /data?page=2&limit=10

      第 2 页 - 限制是可选的(但默认是必需的)。使用该参数,您可以“计算”数据集的位置。

      //not tested
      
      $app->get('/data', function () use ($app) {
          //pls validate that are numbers
          $page = (isset($_GET['page']) && $_GET['page'] > 0) ? $_GET['page'] : 1;
          $limit = isset($_GET['limit']) ? $_GET['limit'] : 10;
      
          $offset = (--$page) * $limit; //calculate what data you want
          //page 1 -> 0 * 10 -> get data from row 0 (first entry) to row 9
          //page 2 -> 1 * 10 -> get data from row 10 to row 19
      
          $countQuery = $stmt->prepare('SELECT COUNT(*) FROM table');
          $dataQuery = $stmt->prepare('SELECT * FROM table LIMIT :limit OFFSET :offset');
          $dataQuery->bindValue(':limit', $limit, \PDO::PARAM_INT); 
          $dataQuery->bindValue(':offset', $offset, \PDO::PARAM_INT); 
      
          try {
              $count = $countQuery->execute();
              $data = $dataQuery->execute();
          } catch(PDOException $e) {
              die('Error.');
          }
          $app->render('data.html', array(
              'data' => $data,
              'count' => $count
          ));
      });
      

      为了更好地处理,您可以编写一个简单的分页助手类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多