Php 如何使用Slim在所有REST URI中接受排序和分页参数?
我正在使用Slim PHP框架为我的应用程序创建一个RESTful API。我希望所有的URL能够接受排序和分页参数。有人能告诉我最好的方法吗 另外,有人能为我提供一些适当的REST URI吗?(即)Php 如何使用Slim在所有REST URI中接受排序和分页参数?,php,api,rest,url-routing,slim,Php,Api,Rest,Url Routing,Slim,我正在使用Slim PHP框架为我的应用程序创建一个RESTful API。我希望所有的URL能够接受排序和分页参数。有人能告诉我最好的方法吗 另外,有人能为我提供一些适当的REST URI吗?(即) 有很多方法可以解决这个问题,我建议使用,因此您在父类中定义了一个常见的行为,并在子类中处理特定的细节 abstract class SortPageHandler { public function getUrlHandler($app) { $me = $this; r
有很多方法可以解决这个问题,我建议使用,因此您在父类中定义了一个常见的行为,并在子类中处理特定的细节
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、分页和排序所需的函数处理公共部分。每个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是否通过惰性构造优化了这一点。在这种情况下,使用抽象类就足够了。
$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();