Database Config
Miko Framework provides a powerful configuration system for managing your application settings centrally.
Config Methods Summary
| Method | Description | Example |
|---|---|---|
load($path) | Load config files | Config::load('/path/to/config') |
get($key, $default) | Read value (dot notation) | Config::get('database.host') |
set($key, $value) | Write value | Config::set('app.debug', true) |
has($key) | Check if value exists | Config::has('database.mysql') |
all() | Get all configuration | Config::all() |
env($key, $default) | Read from .env | Config::env('DB_HOST', 'localhost') |
DbConfig - Fluent Database Configuration
use Miko\Database\DbConfig;
$connection = DbConfig::mysql(
'localhost',
'myapp',
'root',
'secret',
3306
)->charset('utf8mb4')->connect();
// SQLite / SQL Server / PostgreSQL
// DbConfig::sqlite('/path/to/db.sqlite')->connect();
// DbConfig::sqlServer('localhost', 'myapp', 'user', 'pass')->connect();
// DbConfig::postgreSql('localhost', 'myapp', 'user', 'pass')->connect();
// DbConfig::fromEnv()->connect();
There is no DbConfig::create()->driver()->host()->build() chain. Factories return a config object; connect() returns Miko\Database\Connection.
Connection pool (named connections)
Config/Database.php includes pool and session keys. With pool.enabled true, Miko\Core\Database\DatabaseConfig::createConnection() uses DatabaseManager + Miko\Database\ConnectionPool\ConnectionPool.
use Miko\Core\Config;
use Miko\Database\DatabaseManager;
use Miko\Database\ORM\Model;
Config::load(__DIR__ . '/Config');
$manager = DatabaseManager::fromConfig();
Model::setDatabase($manager);
$conn = $manager->connection(); // default
$other = $manager->connection('pgsql');
get() keys: database.default, database.connections.mysql, database.pool.enabled (Config also aliases Database.php as database).
Environment Variables (.env)
Example .env File
# Database Configuration
DB_DRIVER=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_database
DB_USERNAME=root
DB_PASSWORD=
# JWT Configuration
JWT_SECRET=your_jwt_secret_key_here
JWT_EXPIRE=3600
# Encryption
ENCRYPTION_KEY=your_encryption_key_here
# Logging
LOG_MAX_SIZE_MB=3
QUERY_SLOW_THRESHOLD=500
Reading Environment Values
use Miko\Core\Config;
// Database configuration
$host = Config::env('DB_HOST', 'localhost');
$port = Config::env('DB_PORT', 3306);
$database = Config::env('DB_DATABASE', 'my_database');
// JWT configuration
$jwtSecret = Config::env('JWT_SECRET');
$jwtExpire = Config::env('JWT_EXPIRE', 3600);
Config Files
Config/database.php
<?php
use Miko\Core\Config;
return [
'default' => Config::env('DB_DRIVER', 'mysql'),
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => Config::env('DB_HOST', '127.0.0.1'),
'port' => Config::env('DB_PORT', 3306),
'database' => Config::env('DB_DATABASE', 'miko'),
'username' => Config::env('DB_USERNAME', 'root'),
'password' => Config::env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
],
'pgsql' => [
'driver' => 'pgsql',
'host' => Config::env('DB_HOST', '127.0.0.1'),
'port' => Config::env('DB_PORT', 5432),
'database' => Config::env('DB_DATABASE', 'miko'),
'username' => Config::env('DB_USERNAME', 'postgres'),
'password' => Config::env('DB_PASSWORD', ''),
],
'sqlite' => [
'driver' => 'sqlite',
'database' => Config::env('DB_DATABASE', 'database.sqlite'),
],
],
'pool' => [
'min' => 2,
'max' => 10,
'idle_timeout' => 60,
],
];
Using with DbContext
use Miko\Database\ORM\DbContext;
use Miko\Core\Config;
class AppDbContext extends DbContext
{
protected function getConfig(): array
{
return [
'host' => Config::env('DB_HOST_LOCAL', 'localhost'),
'port' => (int) Config::env('DB_PORT', 3306),
'database' => Config::env('DB_DATABASE_LOCAL', 'myapp'),
'username' => Config::env('DB_USERNAME_LOCAL', 'root'),
'password' => Config::env('DB_PASSWORD_LOCAL', ''),
'charset' => 'utf8mb4'
];
}
}
Best Practices
| Rule | Description |
|---|---|
| Don't commit .env | Add to .gitignore, use .env.example |
| Use defaults | Config::get('key', 'default') for safe reading |
| Keep secrets in .env | Passwords, API keys should be in .env |
| Modular config files | Separate app.php, database.php, cache.php |