elfstack / slim-listing
This package is abandoned and no longer maintained.
No replacement package was suggested.
Quickly build listing API on Slim Framework
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-10-14 19:18:24 UTC
README
This package provides functionality to build a general listing API in a quick and convenient fashion. Which is heavily inspired by BRACKETS-by-TRIAD/admin-listing. It handles request like pagination, sorting, filtering and searching.
Installation
Composer
composer require elfstack/slim-listing
Slim (Recommended)
$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; };
Usage
Full Example
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); }
Create an Instance
Listing::create(Model::class); Listing::create(new Model());
Retrieving Result
Get collection only
get($request);
Get response
get($request, $response);
Query String Pattern
Patterns below can be used together
- Ordering:
orderBy=<column>&direction=<desc|asc>
- Filtering:
filter=<column1:val1,val2;column2:val1,val2;column3:val1,val2>
- Pagination:
perPage=<perPage>&page=<page>
- Search:
keyword=<keyword>
Response
{
"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
}
NOTE: The url is not implemented and will remove in the future.
License
MIT