繁体   English   中英

苗条的框架分页

[英]Slim Framework Pagination

您好,我将Slim框架与PDO连接一起使用,遇到了一个大问题(对我来说)。 我想用雄辩的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
        ));
});

如何使用纤细框架进行分页? 有针对这个的解决方法吗? 谢谢!

您可以为路由提供一些参数-我不确定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
    ));
});

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

如何使用纤细框架进行分页?

您可能可以使用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的问题,由您自己决定。

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM