Cara Menggunakan phpdotenv ( .env ) pada CodeIgniter 3

Integrasi .env pada CodeIgniter

Saat kita membangun sebuah aplikasi, kebanyakan dari kita biasanya menyimpan data credential seperti konfigurasi database maupun yang lainnya langsung pada kode program. Apabila kita sudah bekerja secara tim dalam membangun sebuah proyek aplikasi, bisa jadi antar developer menggunakan credential yang berbeda. Hal seperti ini tentunya akan menghambat kerjasama tim karena harus menyamakan credential antar developer terlebih dahulu. Belum lagi kita juga harus mengkonfigurasi data credential antar environment.
Pada framework CodeIgniter, kita dapat memisahkan data credential antar environment dengan cara memisahkannya dengan direktori. Namun hal ini, data tersebut tetap akan masuk pada Git repo. Hal ini pun kurang begitu efektif dan tidak begitu aman karena semua kolaborator pada proyek tersebut dapat mengetahui data credential yang bisa jadi hanya orang-orang tertentu yang diperbolehkan untuk menyimpan data credential tersebut.
Permasalahan seperti ini pernah saya alami saat mengatur data credential pada development environment, yang mana pada saat itu terjadi konflik pada pengaturan config database saat melakukan merge pada repo. Selain itu saya juga harus mengganti konfigurasi lainnya pada server production yang mana seperti kita ketahui, konfigurasi di CodeIgniter berada pada file yang berbeda-beda. Jadi kita harus mengedit satu-per-satu file konfigurasi sesuai dengan environment yang kita pakai. Untuk mengatur data credential yang saling terpisah tersebut ternyata lumayan memakan waktu. Hingga akhirnya kami (saya dan tim developer lain) berdiskusi dan memutuskan untuk menggunakan file .env sebagai tempat untuk menyimpan seluruh data credential. Pengambilan keputusan ini juga terinspirasi dari framework Laravel yang mana pada framework tersebut memang sudah menggunakan file .env sebagai tempat penyimpanan data credentialnya. Dan disini kita akan mengimplementasi file .env agar berjalan di framework CodeIgniter.

Instalasi phpdotenv di CodeIgniter
Untuk langkah pertama, kita harus mengaktifkan composer pada proyek CodeIgniter terlebih dahulu. Untuk cara instalasi composer di CodeIgniter akan saya paparkan di lain waktu.
  1. Buka file config.php yang terdapat pada path berikut:
    application/config/config.php
  2. Aktifkan Composer
    $config['composer_autoload'] = true;
  3. Masuk ke directori application melalui command line dan lakukan perintah berikut:
    composer require vlucas/phpdotenv ^3.6
    composer install
  4. Langkah pertama untuk Instalasi package PhpDotENV di CodeIgniter selesai.

Konfigurasi phpdotenv di CodeIgniter
Pada langkah kedua ini, kita akan melakukan konfigurasi agar CodeIgniter otomatis membaca file .env. Ada beberapa cara untuk melakukan konfigurasi phpdotenv pada CodeIgniter, salah satunya menggunakan Hooks. Untuk menggunakan fitur Hooks dari CodeIgniter, kita aktifkan dulu melalui file config.php yang terdapat pada application/config/config.php menjadi seperti ini:
$config['enable_hooks'] = TRUE;
Lalu buka file hooks.php yang terdapat pada application/config/hooks.php dan masukkan kode berikut:
# Load phpdotenv
$hook['pre_system'] = function() {
 $dotenv = Dotenv\Dotenv::create(APPPATH);
 $dotenv->load();
};

Selanjutnya, buatlah file .env di dalam direktori application. Gunakan text editor seperti Sublime atau yang lainnya untuk membuat file tersebut.

Penggunaan .env pada CodeIgniter
Pada bagian ini adalah langkah terakhir dalam integrasi .env pada CodeIgniter, yaitu menggunakan variabel ENVIRONMENT pada konfigurasi bawaan CI. Sebagai contoh saya akan mengubah konfigurasi database menggunakan .env.
  1. Buka file .env yang sudah kita buat pada langkah sebelumnya dan masukkan data berikut:
    # Database Configuration
    DB_HOSTNAME="localhost"
    DB_USERNAME=""
    DB_PASSWORD=""
    DB_DATABASE=""
    DB_DRIVER="mysqli"
  2. Buka file konfigurasi database.php yang terdapat pada application/config/database.php
  3. Ganti value dari variabel konfigurasi dengan variabel environment seperti contoh di bawah ini:
     'hostname' => getenv('DB_HOSTNAME'),
     'username' => getenv('DB_USERNAME'),
     'password' => getenv('DB_PASSWORD'),
     'database' => getenv('DB_DATABASE'),
     'dbdriver' => getenv('DB_DRIVER'),
    *NB: penggunaan environment variabel bisa menggunakan getenv(), $_ENV[], $_SERVER[]

Baiklah, demikian cara integrasi file .env pada framework CodeIgniter. Semoga tulisan saya bermanfaat untuk teman-teman yang pernah ataupun sedang mengalami permasalahan yang sama seperti saya. Penggunaan file .env pada tulisan saya ini hanyalah contoh kecil dari penggunaan package phpdotenv itu sendiri, semoga teman-teman dapat mengembangkan penggunaan .env itu sendiri.
Contoh dari penggunaan .env di CodeIgniter bisa dilihat di akun github saya disini:
https://github.com/sunuazizrahayu/phpdotenv-for-codeigniter

*Diperbaharui pada, 8 Februari 2020


Referensi:
http://roopampoddar.com/2016/01/26/integrating-phpdotenv-env-files-in-codeigniter-3-0-using-hooks/
Next Post Previous Post
10 Comments
  • bagas
    bagas 4 Februari 2020 pukul 15.58

    method create sudah berubah menjadi createImmutable

    • Sunu Aziz Rahayu
      Sunu Aziz Rahayu 5 Februari 2020 pukul 10.04

      iya, pada tulisan dibuat saya menggunakan versi 3.x. Pada versi terbaru sudah ada perubahan. tulisan akan diupdate secepatnya.

  • Kicky Maulana
    Kicky Maulana 8 Februari 2020 pukul 19.28

    file env nya bukan bawaan codeigniter ya mas? harus download lagi

    • Sunu Aziz Rahayu
      Sunu Aziz Rahayu 9 Februari 2020 pukul 21.50

      iya, cukup tambahkan secara manual file .env aja

  • Arief Sumaila
    Arief Sumaila 9 Februari 2020 pukul 23.37

    Pada aplikasi yg menggunakan multi db, bagaimana bentuk konfigurasi nya ?

    • Sunu Aziz Rahayu
      Sunu Aziz Rahayu 10 Februari 2020 pukul 21.02

      Bisa dengan cara membuat variabel lagi pada file .env-nya.
      Untuk settingan multiple DB di CI nanti akan saya coba buat artikelnya, atau juga bisa dilihat di dokumentasinya.

  • Faiz
    Faiz 25 Desember 2020 pukul 01.49

    ini memakai codeigniter 3 kan mas? kalo proteksi file .env nya gimana ya?
    soalnya tak buat route nya .env ke halaman 404 gak ngaruh

    • Sunu Aziz Rahayu
      Sunu Aziz Rahayu 9 Juli 2021 pukul 08.57

      bisa pakai .htaccess atau ganti document root-nya

  • Hanso
    Hanso 30 Agustus 2021 pukul 13.11

    Gan ini saya pake CI 3 tapi di hooksnya masih error, dia errornya itu create() sudah saya coba ganti ke createImmutable() tapi msih error ketika di saya jalanin dia keluar Class 'Dotenv\Dotenv' not found di file hooks.php. Ini solusinya gmn ya gan ?

    udah saya coba install ulang dotenvnya tapi msih begini.

    • Sunu Aziz Rahayu
      Sunu Aziz Rahayu 3 September 2021 pukul 06.21

      1. pastikan vendor sudah di load. (cek di config.php)
      2. fitur hook sudah diaktifkan
      3. cek versi dari phpdotenv yang digunakan

Add Comment
comment url