Configuration Files di NexaUI Framework

Pengenalan

Configuration files di NexaUI memungkinkan Anda untuk mengkonfigurasi berbagai aspek aplikasi tanpa harus mengubah kode sumber. Ini mempermudah penyesuaian perilaku aplikasi di berbagai lingkungan (development, testing, production) dan memungkinkan perubahan konfigurasi tanpa deploy ulang.

Struktur Direktori Konfigurasi

File konfigurasi di NexaUI disimpan dalam direktori config/ di root aplikasi:

config/
├── app.php           # Konfigurasi aplikasi umum
├── database.php      # Konfigurasi database
├── cache.php         # Konfigurasi cache
├── mail.php          # Konfigurasi email
├── logging.php       # Konfigurasi logging
├── session.php       # Konfigurasi session
├── auth.php          # Konfigurasi autentikasi
├── services.php      # Konfigurasi layanan eksternal
└── routes.php        # Konfigurasi routing (opsional)

Format File Konfigurasi

File konfigurasi di NexaUI adalah file PHP yang mengembalikan array. Ini memberikan fleksibilitas untuk menggunakan logika PHP dalam konfigurasi Anda.

<?php
// config/app.php

return [
    'name' => 'NexaUI Application',
    'version' => '1.0.0',
    'environment' => env('APP_ENV', 'production'),
    'debug' => env('APP_DEBUG', false),
    'url' => env('APP_URL', 'http://localhost'),
    'timezone' => 'Asia/Jakarta',
    'locale' => 'id',
    'fallback_locale' => 'en',
    'key' => env('APP_KEY'),
    'cipher' => 'AES-256-CBC',
    
    'providers' => [
        // Core Service Providers
        App\System\Providers\DatabaseServiceProvider::class,
        App\System\Providers\EventServiceProvider::class,
        App\System\Providers\RouteServiceProvider::class,
        
        // Application Service Providers
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        App\Providers\EventServiceProvider::class,
    ],
    
    'aliases' => [
        'DB' => App\System\Database\DatabaseFacade::class,
        'Auth' => App\System\Auth\AuthFacade::class,
        'Event' => App\System\Events\EventFacade::class,
        'Cache' => App\System\Cache\CacheFacade::class,
    ],
];

Perhatikan penggunaan fungsi env() untuk mengambil nilai dari environment variables, dengan nilai default sebagai parameter kedua.

Mengakses Konfigurasi

NexaUI menyediakan beberapa cara untuk mengakses nilai konfigurasi:

Fungsi config()

Cara paling umum adalah menggunakan fungsi config():

// Mengambil seluruh array konfigurasi
$appConfig = config('app');

// Mengambil nilai spesifik
$appName = config('app.name');
$dbConnection = config('database.default');

// Mengambil nilai dengan default
$timeout = config('app.timeout', 30);

Class Config

Anda juga dapat menggunakan class Config secara langsung:

use App\System\Config\Config;

// Mengambil nilai
$appName = Config::get('app.name');

// Mengambil nilai dengan default
$timeout = Config::get('app.timeout', 30);

// Memeriksa apakah konfigurasi ada
if (Config::has('mail.from')) {
    // ...
}

// Mengatur nilai konfigurasi runtime (tidak persisten)
Config::set('app.debug', true);

Konfigurasi Berbasis Lingkungan

NexaUI mendukung konfigurasi berbeda untuk lingkungan yang berbeda. Ini dicapai dengan menggunakan environment variables dan file .env.

File .env

File .env berisi environment variables yang spesifik untuk lingkungan tertentu:

# .env
APP_NAME="NexaUI Application"
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nexaui
DB_USERNAME=root
DB_PASSWORD=secret

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

Nilai-nilai ini dapat diakses dalam file konfigurasi menggunakan fungsi env().

Konfigurasi Berbeda per Lingkungan

Anda dapat menggunakan logika kondisional dalam file konfigurasi untuk mengatur nilai berbeda berdasarkan lingkungan:

<?php
// config/logging.php

$logLevel = env('APP_ENV') === 'production' ? 'error' : 'debug';

return [
    'default' => env('LOG_CHANNEL', 'file'),
    'channels' => [
        'file' => [
            'driver' => 'file',
            'path' => storage_path('logs/nexa.log'),
            'level' => $logLevel,
        ],
        'syslog' => [
            'driver' => 'syslog',
            'level' => $logLevel,
        ],
    ],
];

File Konfigurasi Utama

app.php

Berisi konfigurasi umum aplikasi seperti nama, lingkungan, timezone, dan service providers:

<?php
// config/app.php

return [
    'name' => env('APP_NAME', 'NexaUI Application'),
    'environment' => env('APP_ENV', 'production'),
    'debug' => env('APP_DEBUG', false),
    'url' => env('APP_URL', 'http://localhost'),
    'timezone' => 'Asia/Jakarta',
    'locale' => 'id',
    'fallback_locale' => 'en',
    'key' => env('APP_KEY'),
    'cipher' => 'AES-256-CBC',
    
    'providers' => [
        // Service providers...
    ],
    
    'aliases' => [
        // Class aliases...
    ],
];

database.php

Berisi konfigurasi koneksi database:

<?php
// 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', 'nexaui'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
        
        'sqlite' => [
            'driver' => 'sqlite',
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
        ],
        
        'pgsql' => [
            'driver' => 'pgsql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'nexaui'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],
    ],
    
    'migrations' => 'migrations',
    
    'redis' => [
        'client' => 'predis',
        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
        ],
    ],
];

cache.php

Berisi konfigurasi sistem cache:

<?php
// config/cache.php

return [
    'default' => env('CACHE_DRIVER', 'file'),
    
    'stores' => [
        'file' => [
            'driver' => 'file',
            'path' => storage_path('framework/cache'),
        ],
        
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
        ],
        
        'memcached' => [
            'driver' => 'memcached',
            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
            'sasl' => [
                env('MEMCACHED_USERNAME'),
                env('MEMCACHED_PASSWORD'),
            ],
            'options' => [
                // Memcached options...
            ],
            'servers' => [
                [
                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),
                    'port' => env('MEMCACHED_PORT', 11211),
                    'weight' => 100,
                ],
            ],
        ],
    ],
    
    'prefix' => env('CACHE_PREFIX', 'nexaui_cache'),
];

mail.php

Berisi konfigurasi untuk pengiriman email:

<?php
// config/mail.php

return [
    'driver' => env('MAIL_DRIVER', 'smtp'),
    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
    'port' => env('MAIL_PORT', 587),
    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],
    'encryption' => env('MAIL_ENCRYPTION', 'tls'),
    'username' => env('MAIL_USERNAME'),
    'password' => env('MAIL_PASSWORD'),
    'sendmail' => '/usr/sbin/sendmail -bs',
    'markdown' => [
        'theme' => 'default',
        'paths' => [
            resource_path('views/vendor/mail'),
        ],
    ],
];

Membuat File Konfigurasi Kustom

Anda dapat membuat file konfigurasi kustom untuk kebutuhan spesifik aplikasi Anda:

<?php
// config/payment.php

return [
    'default' => env('PAYMENT_GATEWAY', 'midtrans'),
    
    'gateways' => [
        'midtrans' => [
            'client_key' => env('MIDTRANS_CLIENT_KEY'),
            'server_key' => env('MIDTRANS_SERVER_KEY'),
            'sandbox' => env('MIDTRANS_SANDBOX', true),
            'sanitize' => true,
            '3ds' => true,
        ],
        
        'doku' => [
            'mall_id' => env('DOKU_MALL_ID'),
            'shared_key' => env('DOKU_SHARED_KEY'),
            'sandbox' => env('DOKU_SANDBOX', true),
        ],
    ],
];

Kemudian Anda dapat mengakses konfigurasi ini seperti biasa:

$defaultGateway = config('payment.default');
$midtransConfig = config('payment.gateways.midtrans');

Praktik Terbaik

  • Gunakan Environment Variables - Simpan nilai sensitif dan spesifik lingkungan di environment variables, bukan di file konfigurasi.
  • Berikan Default yang Masuk Akal - Selalu berikan nilai default yang masuk akal untuk setiap konfigurasi.
  • Dokumentasikan Konfigurasi - Tambahkan komentar untuk menjelaskan tujuan dan format nilai konfigurasi.
  • Grup Konfigurasi Terkait - Kelompokkan konfigurasi terkait dalam file yang sama dan gunakan array bersarang untuk mengorganisirnya.
  • Hindari Hardcoding - Hindari hardcoding nilai yang mungkin perlu diubah di masa depan, gunakan konfigurasi sebagai gantinya.
  • Validasi Konfigurasi - Validasi nilai konfigurasi pada startup aplikasi untuk mendeteksi masalah lebih awal.

Kesimpulan

Configuration files di NexaUI menyediakan cara yang fleksibel dan terorganisir untuk mengkonfigurasi aplikasi Anda. Dengan memisahkan konfigurasi dari kode dan menggunakan environment variables, Anda dapat dengan mudah menyesuaikan perilaku aplikasi di berbagai lingkungan tanpa mengubah kode sumber.