如何在 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+'));