/ Environment

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
truetrueboolean
falsefalseboolean
nullnullnull
empty''string (empty)
"text"'text'string (quotes removed)
123123integer

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 .envAdd .env to .gitignore for version control
Create .env.exampleTemplate file without sensitive values
Use defaultsAlways provide fallback values for env()
Keep secrets secureAPI keys, passwords only in .env file
Environment separationDifferent .env per environment (dev, staging, prod)