PHP code example of rafalmasiarek / dashboard-kit-addon-api
1. Go to this page and download the library: Download rafalmasiarek/dashboard-kit-addon-api library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
rafalmasiarek / dashboard-kit-addon-api example snippets
// modules/notes/module.php
'api' => [
'v1' => [
'GET /' => ['scopes' => ['notes:read'], 'handler' => ...],
'POST /' => ['scopes' => ['notes:write'], 'handler' => ...],
],
],
'api' => [
'v1' => [
'GET /{id}' => [
'scopes' => ['notes:read'],
'openapi' => [
'summary' => 'Get a note',
'description' => 'Returns a single note by ID.',
'tags' => ['notes'],
],
'params' => [
'id' => ['in' => 'path', 'type' => 'integer', ''type' => 'object', ...]],
404 => ['description' => 'Note not found', 'code' => 'NOT_FOUND'],
],
'handler' => function (array $params, mixed $body, ContainerInterface $c): array {
// $params['id'] is already cast to int (declared type: integer)
// $body is the parsed JSON request body (or [] when absent)
$stmt = $c->get(PDO::class)->prepare('SELECT * FROM notes WHERE id = ?');
$stmt->execute([$params['id']]);
$note = $stmt->fetch(PDO::FETCH_ASSOC);
return $note !== false
? ['data' => $note]
: ['error' => 'NOT_FOUND'];
},
],
],
],
return ['error' => 'VALIDATION_FAILED', 'message' => 'Email is invalid.', 'field' => 'email', 'detail' => 'Must contain @.'];
'params' => [
'id' => ['in' => 'path', 'type' => 'integer', '=> ['in' => 'query', 'type' => 'boolean'],
],
'body' => [
'type' => 'object',
'e' => 'string', 'minLength' => 1],
'draft' => ['type' => 'boolean'],
],
],
'responses' => [
200 => [
'description' => 'Notes list',
'schema' => ['type' => 'array', 'items' => ['type' => 'object']],
],
201 => ['description' => 'Created'], // data: {} (no schema needed)
404 => ['description' => 'Not found', 'code' => 'NOT_FOUND'],
422 => ['description' => 'body is
'GET /' => [
'scopes' => ['notes:read'],
'pagination' => [
'default_limit' => 20, // items per page when client does not specify
'max_limit' => 100, // upper cap on per_page
],
'responses' => [
200 => ['description' => 'Notes list', 'schema' => ['type' => 'array', ...]],
],
'handler' => function (array $params, mixed $body, ContainerInterface $c): array {
// $params['page'], $params['limit'], $params['offset'] are injected automatically
$total = (int) $db->query('SELECT COUNT(*) FROM notes')->fetchColumn();
$stmt = $db->prepare('SELECT * FROM notes LIMIT :limit OFFSET :offset');
$stmt->bindValue(':limit', $params['limit'], PDO::PARAM_INT);
$stmt->bindValue(':offset', $params['offset'], PDO::PARAM_INT);
$stmt->execute();
return ['data' => $stmt->fetchAll(PDO::FETCH_ASSOC), 'total' => $total];
},
],
// index.php
'api' => [
'prefix' => '', // optional: 'api' → routes at /api/v1/*, spec at /api/openapi.json
'openapi' => [
'path' => '/openapi.json', // default: /{prefix}/openapi.json
'visibility' => 'admin', // 'admin' | 'user' | 'public'
'info' => [
'title' => 'My App API',
'version' => '1.0.0',
],
'servers' => [['url' => '/']],
],
],
'openapi' => [
'summary' => 'List notes',
'description' => 'Returns all notes ordered by creation date descending.',
'tags' => ['notes'],
'deprecated' => false,
],
if ($container->has(OpenApiRegistry::class)) {
$container->get(OpenApiRegistry::class)
->registerTag('scheduler', 'Scheduler endpoints');
}
'logging' => [
'channels' => [
'api' => ['path' => storage_path('logs/api.log'), 'level' => 'info'],
],
],