Environment
Miko Framework provides environment-based configuration for different deployment scenarios.
Environment Variables
Loading .env File
use Miko\Core\Config;
// Environment values are automatically loaded
$dbHost = Config::env('DB_HOST', 'localhost');
$debug = Config::env('APP_DEBUG', false);
Value Type Conversion
| .env Value |
PHP Value |
Type |
true | true | boolean |
false | false | boolean |
null | null | null |
empty | '' | string (empty) |
"text" | 'text' | string (quotes removed) |
123 | 123 | integer |
Example .env File
# Application
APP_NAME=MyApp
APP_ENV=production
APP_DEBUG=false
APP_URL=https://myapp.com
# Database
DB_DRIVER=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=root
DB_PASSWORD=secret
# JWT Authentication
JWT_SECRET=your-secret-key-min-32-chars
JWT_EXPIRE=3600
# Cache
CACHE_DRIVER=apcu
CACHE_PREFIX=myapp_
# Logging
LOG_LEVEL=error
LOG_MAX_SIZE_MB=5
Environment-Based Configuration
// Check environment
$env = Config::env('APP_ENV', 'production');
if ($env === 'development') {
error_reporting(E_ALL);
ini_set('display_errors', 1);
}
// Database based on environment
if ($env === 'testing') {
$dbConfig = [
'driver' => 'sqlite',
'database' => ':memory:'
];
} else {
$dbConfig = [
'driver' => Config::env('DB_DRIVER', 'mysql'),
'host' => Config::env('DB_HOST', 'localhost'),
'database' => Config::env('DB_DATABASE'),
'username' => Config::env('DB_USERNAME'),
'password' => Config::env('DB_PASSWORD')
];
}
Best Practices
| Practice |
Description |
| Never commit .env | Add .env to .gitignore for version control |
| Create .env.example | Template file without sensitive values |
| Use defaults | Always provide fallback values for env() |
| Keep secrets secure | API keys, passwords only in .env file |
| Environment separation | Different .env per environment (dev, staging, prod) |