Konfigurasi Laravel

Pengenalan

Semua file konfigurasi Laravel tersimpan pada direktori app/config. Tiap opsi telah terdokumentasi, jadi lihatlah tiap filenya, dan perhatikan tiap opsi yg tersedia.

Kadang diperlukan untuk membaca konfigurasi melalui skrip program. Caranya menggunakan class Config:

Mengakses Value Konfigurasi:

Config::get('app.timezone');

Jika menghendaki nilai return default ketika konfigurasi yg dimaksud tidak ada caranya:

$timezone = Config::get('app.timezone', 'UTC');

Perhatikan sintaks dgn dot/titik untuk mengakses value di dalam file. Jika ingin mengisi/seting nilai pada konfigurasi melalui skrip caranya:

Seting Konfigurasi

Config::set('database.default', 'sqlite');

Nilai konfigurasi yg diseting melalui skrip ketika program berjalan hanya berlaku untuk request pada saat itu jg, dan tak akan diingat/disimpan untuk proses request berikutnya.

Konfigurasi Environtment

Akan lebih baik jika mempunyai file konfigurasi yg berbeda berdasarkan lingkungan/tempat penerapan sistem. Misalnya ingin menggunakan cache driver yg berbeda saat dikembangkan secara local dan ketika diterapkan pada server. Caranya mudah bila ingin melakukannya menggunakan konfigurasi berdasarkan lingkungan penerapan (environment based configuration).

Tinggal buat saja folder pada direktori config dgn nama yg sama persis dgn nama environtment. Misal, untuk menimpa cache driver server local, buat file cache.php di folder app/config/local dgn isi sgb berikut:

<?php

return array(

    'driver' => 'file',

);

Note: Jangan gunakan ‘testing’ sebagai nama environment. Nama tsb sudah dipakai untuk unit testing.

Perhatikan bahwa tak perlu menuliskan semua opsi yg tersedia sesuai di file konfigurasi utama, cukup opsi yg perlu ditimpa/berbeda saja. Opsi tambahan yg tertulis tersebut akan menimpa opsi utama dan menjadi kumpulan opsi baru yg digunakan sistem.

Kemudian, framework harus diberitahukan evirontment mana yg harus dijalankan. Environtment defaultnya yaitu production. Untuk diset ke environtment lain buka file bootstrap/start.php. Pada file tersebut terdapat skrip yg memanggil fungsi $app->detectEnvironment. Parameter array yg diberikan ke fungsi tersebut digunakan untuk menentukan environtment yg dijalankan. Environtment dan nama mesin dapat ditambahkan ke array ini sesuai kebutuhan.

<?php

$env = $app->detectEnvironment(array(

    'local' => array('your-machine-name'),

));

Pada contoh diatas, ‘local’ adalah nama environment dan ‘your-machine-name’ adalah nama hostname server. Pada Linux dan Mac, hostname dapat ditentukan dgn perintah hostname melalui terminal.

Jika ingin lebih fleksibel, bisa juga menggunakan Closure ke fungsi detectEnvironment, sehingga dapat mendeteksi environtment sesuai sesukanya:

$env = $app->detectEnvironment(function()
{
    return $_SERVER['MY_LARAVEL_ENV'];
});

Untuk mengakses environtment mana yg dijalankan bisa dgn fungsi environment:

Accessing The Current Application Environment

$environment = App::environment();

Bisa juga ditambahkan fungsi tersebut diberi argumen untuk mengecek apakah sesuai dgn kriteria tertentu:

if (App::environment('local'))
{
    // The environment is local
}

if (App::environment('local', 'staging'))
{
    // The environment is either local OR staging...
}

Konfigurasi Provider

Ketika menggunakan konfigurasi environtment, dapat juga ditambahkan environtment service provider  ke file konfigurasi app utama. Akan tetapi, bila dilakukan, akan terlihat bahwa environment app providers menimpa providers di file konfigurasi app utama. Untuk menekankan providers untuk ditambahkan, gunakan fungsi helper append_config di file konfigurasi environtment app:  

'providers' => append_config(array(
    'LocalOnlyServiceProvider',
))

Melindungi Konfigurasi yg Rentan/Sensitif

Untuk aplikasi “sebenarnya”, sangatdisarankan untuk menyimpan semua konfigurasi sensitif diluar file konfigurasi. Seperti password database, Stripe API keys, dan kunci encripsi harus diluar file konfigurasi jika memungkinkan. Lalu, ditempatkan dimana? Untungnya, Laravel memberikan solusi sederhana untuk melindungi konfigurasi semacam ini menggunakan file dgn “dot”.

Pertama, konfigurasilah aplikasi laravel untukmengenali mesin/server  sbg environtment local. Lalu buat sebuah file “.env.local.php" pada root direktori aplikasi tersebut, yg biasanya bersamaan dgn file composer.json. File “.env.local.php" harus memberi return sebuah array pasangan key-value, seperti file konfigurasi laravel pada umumnya:

 

<?php

return array(

    'TEST_STRIPE_KEY' => 'super-secret-sauce',

);

Semua isian key-value otomatis akan bisa diakses melalui PHP “superglobals” $_ENV dan $_SERVER. Sehingga nilai konfigurasi tersebut dapat dipanggil melalui file konfigurasi:

'key' => $_ENV['TEST_STRIPE_KEY']

Pastikan untuk menambahkan file .env.local.php ke file .gitignore. Sehingga memungkinkan developer lain membuat konfigurasi local sendiri, sekaligus menyembunyikan konfigurasi sensitif pada source control.

Sekarang, pada server production, buat sebuah file  .env.php pada root direktori yg memuat isi konfigurasi pada enirontment production (penerapan nyata). Seperti file .env.local.php, file .env.php juga tidak akandimasukan pada  source control.

Note: Tiap environtment dapat dibuatkan file yg sama. Misal, envirintmen development akan memanggil file .env.development.php jika ada.

Mode Perawatan

Saat aplikasi pada mode perawatan/maintenance, sebuah view khusus dapat ditampilkan untuk semua request/route. Sehingga mudah untuk men-disable aplikasi saatsedang dilakukan update atau maintenance. Skrip yg memanggil App::down sudah tersedia pada file app/start/global.php. Respon pada fungsi/method ini akan diberikan ke user bila aplikasi sedang pada mode perawatan.

Untuk menghidupkan mode perawatan, jalankan perintah down:

php artisan down

Untuk menghentikan mode perawatan, gunakan perintah up:

php artisan up

Untuk menampilkan view khusus saat mode perawatan, tambahkan skrip berikut pada file app/start/global.php:

App::down(function()
{
    return Response::view('maintenance', array(), 503);
});

Jika Closure yg diberikan ke fungsi down memberi returns NULL, mode perawatan akan diabaikan pada request tsb.

Mode Perawatan & Antrian

Saat aplikasi sedang dalam mode perawatan, tak ada job antrian yg dikerjakan. Antrian tersebut akan kembali berjalan ketika mode perawatan telah usai.