Marwa Framework uses a simple PHP configuration system with environment variable support. Configuration files are stored in the config/ directory.
Copy .env.example to .env and configure:
APP_NAME="My Application"
APP_ENV=local
APP_KEY=base64:your-32-byte-key-here
APP_DEBUG=true
DB_CONNECTION=mysql
DB_HOST=localhost
DB_DATABASE=myapp
DB_USERNAME=root
DB_PASSWORD=
CACHE_DRIVER=file
SESSION_DRIVER=file
LOG_CHANNEL=file
config/app.php:
return [
'providers' => [
Marwa\Framework\Providers\KernelServiceProvider::class,
App\Providers\AppServiceProvider::class,
],
'middlewares' => [
Marwa\Framework\Middlewares\RequestIdMiddleware::class,
Marwa\Framework\Middlewares\SessionMiddleware::class,
Marwa\Framework\Middlewares\MaintenanceMiddleware::class,
Marwa\Framework\Middlewares\SecurityMiddleware::class,
Marwa\Framework\Middlewares\RouterMiddleware::class,
],
'debugbar' => env('DEBUGBAR_ENABLED', false),
'collectors' => [],
'maintenance' => [
'template' => 'maintenance.twig',
'message' => 'Service temporarily unavailable',
],
'error404' => [
'template' => 'errors/404.twig',
],
];
config/database.php:
return [
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'myapp'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
],
'sqlite' => [
'driver' => 'sqlite',
'database' => database_path('database.sqlite'),
],
],
];
config/session.php:
return [
'enabled' => true,
'autoStart' => false,
'name' => 'marwa_session',
'lifetime' => 7200,
'path' => '/',
'domain' => '',
'secure' => env('APP_ENV') === 'production',
'httpOnly' => true,
'sameSite' => 'Lax',
'encrypt' => true,
];
config/security.php:
return [
'enabled' => true,
'csrf' => [
'enabled' => true,
'field' => '_token',
'header' => 'X-CSRF-TOKEN',
'token' => '__marwa_csrf_token',
'methods' => ['POST', 'PUT', 'PATCH', 'DELETE'],
'except' => [],
],
'trustedHosts' => [],
'trustedOrigins' => [],
'throttle' => [
'enabled' => true,
'prefix' => 'security',
'limit' => 60,
'window' => 60,
],
];
config/cache.php:
return [
'default' => env('CACHE_DRIVER', 'file'),
'stores' => [
'file' => [
'driver' => 'file',
'path' => storage_path('cache'),
],
'array' => [
'driver' => 'array',
],
],
];
config/mail.php:
return [
'driver' => env('MAIL_MAILER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'noreply@example.com'),
'name' => env('MAIL_FROM_NAME', 'My App'),
],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
];
config/logger.php:
return [
'enable' => env('APP_DEBUG', false),
'filter' => [
'password',
'secret',
'token',
],
'level' => 'debug',
'storage' => [
'driver' => env('LOG_CHANNEL', 'file'),
'path' => storage_path('logs'),
'prefix' => 'marwa',
],
];
// Get a value
$debug = config('app.debugbar');
// Get with default
$port = config('database.connections.mysql.port', 3306);
// Set a value
config(['app.debugbar' => true]);
$env = env('APP_ENV', 'production');
$debug = env('APP_DEBUG', false);
In production, cache configuration for performance:
php marwa config:cache
Clear the cache:
php marwa config:clear
.env for sensitive values