PHP code example of rafalmasiarek / dashboard-kit
1. Go to this page and download the library: Download rafalmasiarek/dashboard-kit 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 example snippets
use DI\ContainerBuilder;
use rafalmasiarek\DashboardKit\Dashboard;
use Slim\Factory\AppFactory;
$container = (new ContainerBuilder())->build();
AppFactory::setContainer($container);
$app = AppFactory::create();
Dashboard::create($app, $container, [
'db' => [
'driver' => 'mysql',
'host' => 'localhost',
'dbname' => 'myapp',
'user' => 'root',
'password' => 'secret',
],
'modules_path' => __DIR__ . '/modules',
'admin_modules_path' => __DIR__ . '/admin_modules',
'storage_path' => __DIR__ . '/storage',
'templates_path' => __DIR__ . '/templates',
'app' => [
'env' => 'production',
'name' => 'My App',
],
]);
$app->run();
// modules/notes/module.php
return [
'title' => 'Notes',
'icon' => '📝',
'render' => function ($req, $res, $args, $twig, $db, $container) {
return $twig->render($res, 'notes/index.twig', []);
},
];
// modules/notes/module.php
return [
'title' => 'Notes',
'schema' => [
'notes' => [
'columns' => [
'title' => ['type' => 'string', 'null' => false],
'body' => ['type' => 'text'],
'user_id' => ['type' => 'uuid', 'null' => false],
'active' => ['type' => 'tinyint', 'default' => 1],
],
'indexes' => [
['columns' => ['user_id']],
],
],
],
'render' => function ($req, $res, $args, $twig, $db, $container) { ... },
];
Dashboard::create($app, $container, [
// ...
'schema' => [
'shared_settings' => [
'columns' => [
'key' => ['type' => 'string', 'null' => false, 'unique' => true],
'value' => ['type' => 'text'],
],
],
],
]);
Dashboard::create($app, $container, [
'table_prefix' => 'app_',
// module table "notes" → "app_notes"
]);
$stmt = $db->prepare("SELECT * FROM `" . $db->table('notes') . "` WHERE id = ?");
'seed' => [
'users' => [
'match' => 'email', // column used for the existence check before inserting
'with_id' => true, // auto-generate UUID for id if absent (default)
'rows' => [
[
'email' => '[email protected] ',
'role' => 'admin',
'active' => 1,
'password_hash' => password_hash('secret', PASSWORD_BCRYPT),
],
],
],
'api_scopes' => [
'match' => 'name',
'with_id' => false, // table uses AUTO_INCREMENT — skip UUID injection
'rows' => [
['name' => 'notes:read', 'description' => 'Read notes'],
['name' => 'notes:write', 'description' => 'Manage notes'],
],
],
],
$container->get(SettingsSectionRegistry::class)->register('my-plugin', [
'title' => 'My Plugin',
'path' => '/settings/my-plugin',
'order' => 10,
]);
$container->get(UserActionRegistry::class)->register('my-action', [
'label' => 'Manage',
'path_pattern' => '/admin/my-plugin/users/{id}',
'order' => 10,
]);
use rafalmasiarek\DashboardKit\Extension\FormSlotRegistry;
$registry = $dashboard->getContainer()->get(FormSlotRegistry::class);
// Static HTML string
$registry->register('login', 'form_fields', '<div class="g-recaptcha mb-3" data-sitekey="..."></div>');
// Callable — evaluated at render time, can inspect session or other runtime state
$registry->register('login', 'form_fields', static function (): string {
return ((int) ($_SESSION['login_fails'] ?? 0)) >= 3
? '<div class="g-recaptcha mb-3" data-sitekey="..."></div>'
: '';
});
// Optional order parameter — lower numbers render first (default: 100)
$registry->register('login', 'form_fields', $tosCheckbox, order: 10);
$registry->register('login', 'form_fields', $captchaWidget, order: 50);
$dashboard->on('login_failed', function (string $email, string $ip) {
// track failure, increment counter, notify, etc.
});
$dashboard->on('register_failed', function (string $email, string $errorMessage, string $ip) {
// track registration abuse, duplicate detection, etc.
});
// config
'logging' => [
'channels' => [
'app' => ['path' => storage_path('logs/app.log'), 'level' => 'info'],
'audit' => ['path' => storage_path('logs/audit.log'), 'level' => 'info'],
'error' => ['path' => storage_path('logs/error.log'), 'level' => 'warning'],
],
],