如何在 Slim 2 中对博客 post 进行分页?
How to paginate blog post in Slim 2?
我正在尝试使用 Slim 2 Framework 对博客文章进行分页,但我对如何在 rest 框架中传递参数感到困惑。
我们如何参加 localhost/blog.php?page=2
Slim 2?
你确实可以在 Slim 中使用像 localhost/blog.php?page=2
这样的 URL,但它违背了路由系统的目的。理想的做法是完全使用路由来路由,比如/blog/2
.
不过,您也可以按自己的方式进行。为 /blog
设置路由,然后在控制器函数中读取 $_GET['page']
。不要忘记将其转换为 int
,这样输入是安全的。始终检查参数是否存在,使用 isset()
,以防止不存在的索引通知。
顺便说一句,我注意到这段代码有问题:
$page = $request->get('page');
// Get the current page if not set to page 1
$currentPage = isset($page) ? $page : 1;
if(!is_numeric($currentPage)) {
$app->notFound();
}
您在这里使用了 isset()
,这没有帮助 -- $page
将 总是 设置在第一行之后。这适用于检查 $_GET
超全局中是否存在条目,但我们在这里不使用它。
此外,最好为路由参数添加一个条件,而不是手动检查它是一个数字。将所有这些结合在一起,你可以做这样的事情:
<?php
$app = new \Slim\Slim();
$app->get('/blog(/:page)', function() use ($app) {
$page = $request->get('page');
$maxPage = 4; // This would be done dynamically
if ($page < 1 || $page > $maxPage) {
$app->notFound();
}
// More code here...
})->conditions(array('page' => '\d+'));
我正在尝试使用 Slim 2 Framework 对博客文章进行分页,但我对如何在 rest 框架中传递参数感到困惑。
我们如何参加 localhost/blog.php?page=2
Slim 2?
你确实可以在 Slim 中使用像 localhost/blog.php?page=2
这样的 URL,但它违背了路由系统的目的。理想的做法是完全使用路由来路由,比如/blog/2
.
不过,您也可以按自己的方式进行。为 /blog
设置路由,然后在控制器函数中读取 $_GET['page']
。不要忘记将其转换为 int
,这样输入是安全的。始终检查参数是否存在,使用 isset()
,以防止不存在的索引通知。
顺便说一句,我注意到这段代码有问题:
$page = $request->get('page');
// Get the current page if not set to page 1
$currentPage = isset($page) ? $page : 1;
if(!is_numeric($currentPage)) {
$app->notFound();
}
您在这里使用了 isset()
,这没有帮助 -- $page
将 总是 设置在第一行之后。这适用于检查 $_GET
超全局中是否存在条目,但我们在这里不使用它。
此外,最好为路由参数添加一个条件,而不是手动检查它是一个数字。将所有这些结合在一起,你可以做这样的事情:
<?php
$app = new \Slim\Slim();
$app->get('/blog(/:page)', function() use ($app) {
$page = $request->get('page');
$maxPage = 4; // This would be done dynamically
if ($page < 1 || $page > $maxPage) {
$app->notFound();
}
// More code here...
})->conditions(array('page' => '\d+'));