gpt4 book ai didi

php - 如何使用 Slim 接受所有 REST URI 中的排序和分页参数?

转载 作者:可可西里 更新时间:2023-11-01 00:48:16 25 4
gpt4 key购买 nike

我正在使用 Slim PHP 框架为我的应用程序创建一个 RESTful API。我希望所有 URL 都能够接受用于排序和分页的参数。谁能告诉我执行此操作的最佳方法?

此外,有人可以为此提供一些适当的 REST URI 吗? (即 http://domain.com/api/category/fruit/?sort=DESC&results=25&page=2 )

<?php

require 'Slim/Slim.php';

$sort = "ASC";
$results = 10;
$page = 1;

$app = new Slim();

$app->get('/wines', function () use ($app) {
$sort = $app->request()->params('sort');
$results = $app->request()->params('results');
$page = $app->request()->params('page');

getWines();
});

$app->get('/categories', function () use ($app) {
$sort = $app->request()->params('sort');
$results = $app->request()->params('results');
$page = $app->request()->params('page');

getCategories();
});

$app->get('/sub-categories', function () use ($app) {
$sort = $app->request()->params('sort');
$results = $app->request()->params('results');
$page = $app->request()->params('page');

getSubCategories();
});

$app->run();

function getWines() {
$sql = "select * FROM wine ORDER BY name " . $sort . " LIMIT " . $page . " , $results";
try {
$db = getConnection();
$stmt = $db->query($sql);
$wines = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo '{"wine": ' . json_encode($wines) . '}';
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}

?>

最佳答案

有很多方法可以解决这个问题,我建议使用 Template Method pattern ,所以你在父类中定义了一个共同的行为,并在子类中处理具体的细节。

abstract class SortPageHandler {
public function getUrlHandler($app)
{
$me = $this;
return function () use ($app, $me) {
$sort = $app->request()->params('sort');
$results = $app->request()->params('results');
$page = $app->request()->params('page');

$app->response()->write($me->getItems($sort, $results, $page));
};
}

abstract public function getItems($sort, $results, $page);
}

class WineHandler extends SortPageHandler {
public function getItems($sort, $results, $page)
{
//return wines
}

}

class CategoryHandler extends SortPageHandler {
public function getItems($sort, $results, $page)
{
//return categories
}
}

class SubCategoryHandler extends SortPageHandler {
public function getItems($sort, $results, $page)
{
//return sub-categories
}
}

所以父类SortPageHandler处理了Slim需要的功能和分页排序的公共(public)部分。每个 getItems() 方法都特定于每个实体。通过在 SortPageHandler 中声明此方法 abstract,我们强制所有子类实现此功能。

现在 Slim 代码看起来非常干净:

$app = new \Slim\Slim();

$wineHandler = new WineHandler();
$categoryHandler = new CategoryHandler();
$subCategoryHandler = new SubCategoryHandler();

$app->get('/wines', $wineHandler->getUrlHandler($app));
$app->get('/categories', $categoryHandler->getUrlHandler($app));
$app->get('/sub-categories', $subCategoryHandler->getUrlHandler($app));

$app->run();

与往常一样,您可以进一步重构这段代码,但这是为了让您了解如何解决这个问题。

关于php - 如何使用 Slim 接受所有 REST URI 中的排序和分页参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13240138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com