elfstack / slim-listing
在 Slim 框架上快速构建列表 API
v1.1
2020-03-05 09:57 UTC
Requires
- php: ^7.2
- illuminate/database: ^7.0
- illuminate/pagination: ^7.0
- slim/slim: ^3.0
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-14 19:09:38 UTC
README
此包提供了一种快速便捷的方式来构建通用的列表 API。它深受 BRACKETS-by-TRIAD/admin-listing 的启发。它处理请求,如分页、排序、过滤和搜索。
安装
Composer
composer require elfstack/slim-listing
Slim (推荐)
$config = [ 'settings' => [ 'displayErrorDetails' => true, 'db' => [ 'driver' => 'sqlite', 'database' => __DIR__.'/../database.sqlite' ] ], ]; $app = new \Slim\App($config); $container = $app->getContainer(); $capsule = new \Illuminate\Database\Capsule\Manager; $capsule->addConnection($container['settings']['db']); $capsule->bootEloquent(); $capsule->setAsGlobal(); $container['db'] = function ($container) use ($capsule){ return $capsule; };
使用方法
完整示例
function controllerMethod(Request $request, Response $response) { return Listing::create(new Model()) ->attachSearching(['field1', 'field2']) ->attachSorting(['field1', 'field2']) ->attachFiltering(['field1', 'field2']) ->modifyQuery(function ($query) { $query->with('model2'); }) ->get($request, $response); }
创建实例
Listing::create(Model::class); Listing::create(new Model());
获取结果
仅获取集合
get($request);
获取响应
get($request, $response);
查询字符串模式
以下模式可以组合使用
- 排序:
orderBy=<column>&direction=<desc|asc>
- 过滤:
filter=<column1:val1,val2;column2:val1,val2;column3:val1,val2>
- 分页:
perPage=<perPage>&page=<page>
- 搜索:
keyword=<keyword>
响应
{
"current_page":1,
"data":[],
"first_page_url":"/?page=1",
"from":1,
"last_page":1,
"last_page_url":"/?page=1",
"next_page_url":null,
"path":"/",
"per_page":10,
"prev_page_url":null,
"to":3,
"total":3
}
注意:此 URL 未实现,将在未来移除。
许可证
MIT