Application Settings di NexaUI Framework

Pengenalan

Application Settings di NexaUI memungkinkan Anda untuk mengkonfigurasi berbagai aspek aplikasi, mulai dari informasi dasar seperti nama dan URL aplikasi hingga pengaturan yang lebih spesifik seperti timezone, locale, dan service providers. Dokumen ini akan membahas cara mengkonfigurasi dan mengelola pengaturan aplikasi di NexaUI.

File Konfigurasi Utama

Pengaturan aplikasi utama di NexaUI disimpan dalam file config/app.php. File ini berisi konfigurasi umum yang berlaku untuk seluruh aplikasi.

<?php
// config/app.php

return [
    /*
    |--------------------------------------------------------------------------
    | Application Name
    |--------------------------------------------------------------------------
    |
    | Nama aplikasi yang akan ditampilkan di berbagai tempat seperti
    | email, notifikasi, dan lainnya.
    |
    */
    'name' => env('APP_NAME', 'NexaUI Application'),

    /*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | Lingkungan aplikasi saat ini. Nilai ini menentukan set
    | konfigurasi yang akan digunakan.
    |
    */
    'environment' => env('APP_ENV', 'production'),

    /*
    |--------------------------------------------------------------------------
    | Application Debug Mode
    |--------------------------------------------------------------------------
    |
    | Ketika mode debug diaktifkan, pesan error detail akan ditampilkan.
    | Jika dinonaktifkan, halaman error generik akan ditampilkan.
    |
    */
    'debug' => env('APP_DEBUG', false),

    /*
    |--------------------------------------------------------------------------
    | Application URL
    |--------------------------------------------------------------------------
    |
    | URL dasar yang digunakan oleh aplikasi. Ini digunakan ketika
    | framework perlu menghasilkan URL lengkap.
    |
    */
    'url' => env('APP_URL', 'http://localhost'),

    /*
    |--------------------------------------------------------------------------
    | Application Timezone
    |--------------------------------------------------------------------------
    |
    | Timezone default yang akan digunakan oleh fungsi date dan datetime
    | di PHP. Gunakan nilai yang didukung oleh PHP.
    |
    */
    'timezone' => 'Asia/Jakarta',

    /*
    |--------------------------------------------------------------------------
    | Application Locale Configuration
    |--------------------------------------------------------------------------
    |
    | Locale menentukan bahasa default yang akan digunakan oleh
    | service translator. Anda bebas mengatur nilai ini sesuai kebutuhan.
    |
    */
    'locale' => 'id',

    /*
    |--------------------------------------------------------------------------
    | Application Fallback Locale
    |--------------------------------------------------------------------------
    |
    | Fallback locale digunakan ketika locale saat ini tidak tersedia.
    |
    */
    'fallback_locale' => 'en',

    /*
    |--------------------------------------------------------------------------
    | Encryption Key
    |--------------------------------------------------------------------------
    |
    | Kunci ini digunakan oleh layanan enkripsi dan harus diatur ke
    | string random 32 karakter. Aplikasi tidak akan aman tanpa ini.
    |
    */
    'key' => env('APP_KEY'),

    'cipher' => 'AES-256-CBC',

    /*
    |--------------------------------------------------------------------------
    | Autoloaded Service Providers
    |--------------------------------------------------------------------------
    |
    | Service providers yang akan dimuat secara otomatis saat aplikasi
    | dimulai. Tambahkan service provider kustom Anda di sini.
    |
    */
    'providers' => [
        // NexaUI Framework Service Providers
        App\System\Providers\DatabaseServiceProvider::class,
        App\System\Providers\EventServiceProvider::class,
        App\System\Providers\RouteServiceProvider::class,
        App\System\Providers\ViewServiceProvider::class,
        
        // Application Service Providers
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
    ],

    /*
    |--------------------------------------------------------------------------
    | Class Aliases
    |--------------------------------------------------------------------------
    |
    | Alias class yang akan didaftarkan ketika aplikasi dimulai.
    | Alias memungkinkan Anda menggunakan class tanpa namespace lengkap.
    |
    */
    'aliases' => [
        'App' => App\System\Facades\App::class,
        'Auth' => App\System\Facades\Auth::class,
        'Config' => App\System\Facades\Config::class,
        'DB' => App\System\Facades\DB::class,
        'Event' => App\System\Facades\Event::class,
        'File' => App\System\Facades\File::class,
        'Log' => App\System\Facades\Log::class,
        'Mail' => App\System\Facades\Mail::class,
        'Route' => App\System\Facades\Route::class,
        'Session' => App\System\Facades\Session::class,
        'Storage' => App\System\Facades\Storage::class,
        'URL' => App\System\Facades\URL::class,
        'Validator' => App\System\Facades\Validator::class,
        'View' => App\System\Facades\View::class,
    ],
];

Mengakses Pengaturan Aplikasi

Anda dapat mengakses pengaturan aplikasi menggunakan fungsi config() atau facade Config:

// Menggunakan fungsi helper
$appName = config('app.name');
$debug = config('app.debug');

// Menggunakan facade
use App\System\Facades\Config;

$appName = Config::get('app.name');
$debug = Config::get('app.debug');

Anda juga dapat mengatur nilai konfigurasi secara runtime (tidak persisten):

// Menggunakan fungsi helper
config(['app.timezone' => 'UTC']);

// Menggunakan facade
Config::set('app.timezone', 'UTC');

Pengaturan Aplikasi Penting

Nama dan URL Aplikasi

Nama aplikasi digunakan di berbagai tempat seperti email, notifikasi, dan judul halaman. URL aplikasi digunakan untuk menghasilkan URL lengkap.

'name' => env('APP_NAME', 'NexaUI Application'),
'url' => env('APP_URL', 'http://localhost'),

Environment

Environment menentukan set konfigurasi yang akan digunakan. Nilai umum adalah local, testing, staging, dan production.

'environment' => env('APP_ENV', 'production'),

Anda dapat memeriksa environment saat ini menggunakan:

// Memeriksa apakah environment adalah production
if (app()->environment('production')) {
    // Kode khusus production
}

// Memeriksa beberapa environment
if (app()->environment(['local', 'staging'])) {
    // Kode untuk local atau staging
}

Debug Mode

Debug mode menentukan apakah error detail akan ditampilkan. Aktifkan di lingkungan development dan nonaktifkan di production.

'debug' => env('APP_DEBUG', false),

Timezone dan Locale

Timezone menentukan zona waktu default untuk fungsi date dan datetime. Locale menentukan bahasa default untuk translasi.

'timezone' => 'Asia/Jakarta',
'locale' => 'id',
'fallback_locale' => 'en',

Anda dapat mengubah locale secara runtime:

// Mengubah locale
app()->setLocale('en');

// Mendapatkan locale saat ini
$locale = app()->getLocale();

Encryption Key

Encryption key digunakan untuk mengenkripsi data seperti session, cookie, dan data sensitif lainnya. Key harus berupa string random 32 karakter.

'key' => env('APP_KEY'),
'cipher' => 'AES-256-CBC',

Anda dapat menghasilkan key menggunakan command:

php nexa key:generate

Service Providers

Service providers adalah titik bootstrap utama di NexaUI. Mereka mendaftarkan komponen dan layanan ke container aplikasi.

'providers' => [
    // NexaUI Framework Service Providers
    App\System\Providers\DatabaseServiceProvider::class,
    App\System\Providers\EventServiceProvider::class,
    App\System\Providers\RouteServiceProvider::class,
    App\System\Providers\ViewServiceProvider::class,
    
    // Application Service Providers
    App\Providers\AppServiceProvider::class,
    App\Providers\AuthServiceProvider::class,
    App\Providers\EventServiceProvider::class,
    App\Providers\RouteServiceProvider::class,
],

Untuk membuat service provider baru, gunakan command:

php nexa make:provider PaymentServiceProvider

Kemudian tambahkan ke array providers di config/app.php:

'providers' => [
    // Other providers...
    App\Providers\PaymentServiceProvider::class,
],

Class Aliases

Aliases memungkinkan Anda menggunakan class tanpa namespace lengkap. NexaUI mendaftarkan beberapa alias bawaan untuk facades.

'aliases' => [
    'App' => App\System\Facades\App::class,
    'Auth' => App\System\Facades\Auth::class,
    'Config' => App\System\Facades\Config::class,
    'DB' => App\System\Facades\DB::class,
    // Other aliases...
],

Anda dapat menambahkan alias kustom:

'aliases' => [
    // Other aliases...
    'Payment' => App\Facades\Payment::class,
],

Pengaturan Maintenance Mode

NexaUI menyediakan maintenance mode yang menampilkan halaman maintenance ketika aplikasi sedang dalam pemeliharaan.

Untuk mengaktifkan maintenance mode:

php nexa down

Untuk menonaktifkan maintenance mode:

php nexa up

Anda juga dapat menyesuaikan pesan maintenance dan mengizinkan IP tertentu:

php nexa down --message="Upgrading Database" --retry=60 --allow=127.0.0.1

Untuk memeriksa apakah aplikasi dalam maintenance mode:

if (app()->isDownForMaintenance()) {
    // Kode khusus maintenance mode
}

Pengaturan Logging

Pengaturan logging di NexaUI disimpan dalam file config/logging.php. NexaUI mendukung berbagai driver logging seperti single file, daily files, syslog, dan errorlog.

<?php
// config/logging.php

return [
    // Default log channel
    'default' => env('LOG_CHANNEL', 'stack'),
    
    // Log channels
    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['daily'],
        ],
        
        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/nexa.log'),
            'level' => env('LOG_LEVEL', 'debug'),
        ],
        
        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/nexa.log'),
            'level' => env('LOG_LEVEL', 'debug'),
            'days' => 14,
        ],
        
        'syslog' => [
            'driver' => 'syslog',
            'level' => env('LOG_LEVEL', 'debug'),
        ],
        
        'errorlog' => [
            'driver' => 'errorlog',
            'level' => env('LOG_LEVEL', 'debug'),
        ],
    ],
];

Untuk menggunakan logging:

// Menggunakan facade
use App\System\Facades\Log;

Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);

// Dengan konteks tambahan
Log::info('User logged in', ['id' => $user->id]);

// Menggunakan channel tertentu
Log::channel('slack')->info('Something happened!');

Pengaturan Session

Pengaturan session di NexaUI disimpan dalam file config/session.php. NexaUI mendukung berbagai driver session seperti file, cookie, database, dan Redis.

<?php
// config/session.php

return [
    // Default session driver
    'driver' => env('SESSION_DRIVER', 'file'),
    
    // Session lifetime in minutes
    'lifetime' => env('SESSION_LIFETIME', 120),
    
    // Session cookie name
    'cookie' => env('SESSION_COOKIE', 'nexa_session'),
    
    // Session cookie path
    'path' => '/',
    
    // Session cookie domain
    'domain' => env('SESSION_DOMAIN', null),
    
    // HTTPS only cookies
    'secure' => env('SESSION_SECURE_COOKIE', false),
    
    // HTTP access only
    'http_only' => true,
    
    // Same-site cookie setting
    'same_site' => 'lax',
    
    // File session location
    'files' => storage_path('framework/sessions'),
    
    // Database session table
    'table' => 'sessions',
    
    // Connection for database driver
    'connection' => null,
    
    // Connection for Redis driver
    'store' => null,
];

Pengaturan Cache

Pengaturan cache di NexaUI disimpan dalam file config/cache.php. NexaUI mendukung berbagai driver cache seperti file, database, memcached, dan Redis.

<?php
// config/cache.php

return [
    // Default cache store
    'default' => env('CACHE_DRIVER', 'file'),
    
    // Cache stores
    'stores' => [
        'file' => [
            'driver' => 'file',
            'path' => storage_path('framework/cache'),
        ],
        
        'database' => [
            'driver' => 'database',
            'table' => 'cache',
            'connection' => null,
        ],
        
        '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,
                ],
            ],
        ],
        
        'redis' => [
            'driver' => 'redis',
            'connection' => 'cache',
        ],
    ],
    
    // Cache prefix
    'prefix' => env('CACHE_PREFIX', 'nexa_cache'),
];

Pengaturan File Storage

Pengaturan file storage di NexaUI disimpan dalam file config/filesystems.php. NexaUI mendukung berbagai driver storage seperti local, FTP, S3, dan SFTP.

<?php
// config/filesystems.php

return [
    // Default filesystem disk
    'default' => env('FILESYSTEM_DRIVER', 'local'),
    
    // Default disk for public files
    'public' => env('FILESYSTEM_PUBLIC_DRIVER', 'public'),
    
    // Filesystem disks
    'disks' => [
        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],
        
        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],
        
        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
        ],
    ],
];

Pengaturan Mail

Pengaturan mail di NexaUI disimpan dalam file config/mail.php. NexaUI mendukung berbagai driver mail seperti SMTP, Sendmail, Mailgun, dan Amazon SES.

<?php
// config/mail.php

return [
    // Default mailer
    'default' => env('MAIL_MAILER', 'smtp'),
    
    // Mailer configurations
    'mailers' => [
        'smtp' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
            'auth_mode' => null,
        ],
        
        'ses' => [
            'transport' => 'ses',
        ],
        
        'mailgun' => [
            'transport' => 'mailgun',
        ],
        
        'sendmail' => [
            'transport' => 'sendmail',
            'path' => '/usr/sbin/sendmail -bs',
        ],
    ],
    
    // Global "From" address
    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],
];

Pengaturan Queue

Pengaturan queue di NexaUI disimpan dalam file config/queue.php. NexaUI mendukung berbagai driver queue seperti sync, database, Redis, dan Amazon SQS.

<?php
// config/queue.php

return [
    // Default queue connection
    'default' => env('QUEUE_CONNECTION', 'sync'),
    
    // Queue connections
    'connections' => [
        'sync' => [
            'driver' => 'sync',
        ],
        
        'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'default',
            'retry_after' => 90,
        ],
        
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => env('REDIS_QUEUE', 'default'),
            'retry_after' => 90,
            'block_for' => null,
        ],
    ],
    
    // Failed queue jobs table
    'failed' => [
        'driver' => env('QUEUE_FAILED_DRIVER', 'database'),
        'database' => env('DB_CONNECTION', 'mysql'),
        'table' => 'failed_jobs',
    ],
];

Praktik Terbaik

  • Gunakan Environment Variables - Simpan nilai yang berbeda per lingkungan di environment variables, bukan di file konfigurasi.
  • Validasi Konfigurasi - Validasi nilai konfigurasi pada startup aplikasi untuk mendeteksi masalah lebih awal.
  • Dokumentasikan Konfigurasi - Tambahkan komentar untuk menjelaskan tujuan dan format nilai konfigurasi.
  • Gunakan Config Caching - Di lingkungan production, cache konfigurasi untuk meningkatkan performa.
  • Kelompokkan Konfigurasi Terkait - Kelompokkan konfigurasi terkait dalam file yang sama dan gunakan array bersarang untuk mengorganisirnya.

Config Caching

Untuk meningkatkan performa di lingkungan production, NexaUI mendukung config caching. Ini menggabungkan semua file konfigurasi menjadi satu file cache.

Untuk membuat cache konfigurasi:

php nexa config:cache

Untuk menghapus cache konfigurasi:

php nexa config:clear

Catatan: Setelah mengubah file konfigurasi, Anda perlu menjalankan config:cache lagi untuk memperbarui cache.

Kesimpulan

Pengaturan aplikasi yang tepat sangat penting untuk performa, keamanan, dan fungsionalitas aplikasi NexaUI. Dengan memahami berbagai opsi konfigurasi dan mengikuti praktik terbaik, Anda dapat membangun aplikasi yang sesuai dengan kebutuhan spesifik Anda.