超薄框架分页
Slim Framework Pagination
你好,我正在使用 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
));
});
如何使用 slim 框架进行分页?有针对这个的解决方法吗?谢谢!
How can I put pagination with slim framework?
您或许可以使用 Zend Paginator http://framework.zend.com/manual/2.3/en/modules/zend.paginator.usage.html . See @mwop own Paginator class and how he does this https://github.com/weierophinney/mwop.net/blob/266eea772717f681936d06425e85bc008a22b6e8/src/Blog/PdoPaginator.php
还有一个https://github.com/whiteoctober/Pagerfanta。您可以尝试其中之一。
关于您关于搬到 Eloquent 的问题,由您决定。
谢谢
您可以为您的路线提供一些参数 - 我不确定 Slim2 中的当前语法,所以我将使用 GET 参数来解释。
/data
未设置分页参数,因此这将是第一页 - 提供默认参数。
/data?page=2&limit=10
第 2 页 - 限制是可选的(但默认值是必需的)。使用该参数,您可以 "calculate" 您的数据集所在的位置。
//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
));
});
为了更好地处理,您可以编写一个简单的分页助手 class。
你好,我正在使用 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
));
});
如何使用 slim 框架进行分页?有针对这个的解决方法吗?谢谢!
How can I put pagination with slim framework?
您或许可以使用 Zend Paginator http://framework.zend.com/manual/2.3/en/modules/zend.paginator.usage.html . See @mwop own Paginator class and how he does this https://github.com/weierophinney/mwop.net/blob/266eea772717f681936d06425e85bc008a22b6e8/src/Blog/PdoPaginator.php
还有一个https://github.com/whiteoctober/Pagerfanta。您可以尝试其中之一。
关于您关于搬到 Eloquent 的问题,由您决定。
谢谢
您可以为您的路线提供一些参数 - 我不确定 Slim2 中的当前语法,所以我将使用 GET 参数来解释。
/data
未设置分页参数,因此这将是第一页 - 提供默认参数。
/data?page=2&limit=10
第 2 页 - 限制是可选的(但默认值是必需的)。使用该参数,您可以 "calculate" 您的数据集所在的位置。
//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
));
});
为了更好地处理,您可以编写一个简单的分页助手 class。