Slim Framework Pagination

wob*_*ano 1 php pagination pdo slim

Hello so I am using slim framework together with PDO connection and is having a big(for me) problem. I wanted to switch with eloquent orm instead of normal try and catching PDO but 45% is already done in my project. So this is my sample code so far

$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
        ));
});
Run Code Online (Sandbox Code Playgroud)

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

dan*_*opz 5

您可以为您的路线提供一些参数 - 我不确定 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
    ));
});
Run Code Online (Sandbox Code Playgroud)

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