Belajar CodeIgniter - Helpers & Libraries
Episode 10 of 27

Belajar CodeIgniter - Helpers & Libraries

Memanfaatkan helper bawaan url, form, html, dan text, lalu membuat custom helper dan custom library, mendaftarkannya sebagai service, dan mengatur autoload agar kode tetap DRY di seluruh aplikasi.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Jika kalian memperhatikan series ini, banyak kode yang berulang: site_url() untuk membuat link, esc() untuk amankan output, form_open() untuk form yang aman CSRF. Kode berulang adalah sumber bug dan sulit dipelihara.

Di episode 10 ini kita merapikannya dengan dua mekanisme CodeIgniter: helpers (fungsi bebas untuk tugas umum) dan libraries (class untuk logika kompleks). Kalian akan belajar memakai helper bawaan, membuat helper custom, membangun library custom, dan mendaftarkannya sebagai service.

Helper Bawaan

Helper adalah kumpulan fungsi yang dimuat sesuai kebutuhan. CodeIgniter 4 punya banyak helper siap pakai:

HelperFungsi utama
urlsite_url(), base_url(), anchor(), uri_string()
formform_open(), form_input(), form_submit(), set_value()
htmlimg(), link_tag(), script_tag()
textword_limiter(), highlight_phrase(), ellipsize()
cookieset_cookie(), get_cookie(), delete_cookie()
numbernumber_to_currency(), number_to_roman()
datenow(), timezone_select()
filesystemdirectory_map(), write_file(), delete_files()
stringrandom_string(), increment_string()
arrayarray_group_by(), array_flatten()
securitysanitize_filename(), strip_image_tags()

Cara Memuat Helper

Memuat helper
helper('url');                 // di controller/method
helper(['form', 'html']);      // beberapa sekaligus
$this->helpers = ['url'];      // di BaseController (auto-load)

Pendekatan yang kami rekomendasikan: daftarkan helper yang hampir selalu dipakai di $helpers BaseController (seperti url dan form), lalu panggil helper('...') untuk helper khusus di tempat yang membutuhkannya.

Contoh helper url dan text
helper(['url', 'text']);
 
echo site_url('posts');            // http://localhost:8080/posts
echo anchor('posts', 'Daftar Post');
 
$excerpt = word_limiter($post['body'], 30);

Membuat Custom Helper

Fungsi yang dipakai di banyak tempat dan tidak butuh state → custom helper. Buat app/Helpers/app_helper.php:

app/Helpers/app_helper.php
<?php
 
if (! function_exists('format_rupiah')) {
    function format_rupiah(int $amount): string
    {
        return 'Rp ' . number_format($amount, 0, ',', '.');
    }
}
 
if (! function_exists('humanize_date')) {
    function humanize_date(string $date): string
    {
        return date('d M Y', strtotime($date));
    }
}

Cara memakainya:

Menggunakan custom helper
helper('app');   // nama file tanpa prefix
 
echo format_rupiah(1500000);     // Rp 1.500.000
echo humanize_date('2026-08-16'); // 16 Agu 2026

Tip

Bungkus tiap fungsi dengan if (! function_exists(...)) agar aman jika helper dimuat dua kali. Ini pola standar di semua helper CodeIgniter dan mencegah error "cannot redeclare function".

Custom Library

Logika yang lebih kompleks, menyimpan state, atau punya banyak method → library. Buat library untuk membuat slug:

app/Libraries/Slugger.php
<?php
 
namespace App\Libraries;
 
class Slugger
{
    public function make(string $text): string
    {
        $text = strtolower($text);
        $text = preg_replace('/[^a-z0-9]+/', '-', $text);
        return trim($text, '-');
    }
}

Pemakaian sederhana:

Memakai library
$slugger = new \App\Libraries\Slugger();
echo $slugger->make('Belajar CodeIgniter 4');  // belajar-codeigniter-4

Mendaftarkan Library sebagai Service

Agar library diinstansiasi sekali dan mudah diakses dari mana pun, daftarkan sebagai service di app/Config/Services.php:

app/Config/Services.php
<?php
 
namespace Config;
 
use CodeIgniter\Config\BaseService;
use App\Libraries\Slugger;
 
class Services extends BaseService
{
    public static function slugger(bool $getShared = true): Slugger
    {
        if ($getShared) {
            return static::getSharedInstance('slugger');
        }
 
        return new Slugger();
    }
}

Pemakaian:

Akses service di mana pun
$slug = \Config\Services::slugger()->make($title);

$getShared = true (default) membuat instance yang sama dibagikan ke seluruh request — efisien untuk library tanpa state antar pemanggilan.

Autoload Helper & Library

Selain BaseController, kalian bisa memuat resource secara global lewat app/Config/Autoload.php:

app/Config/Autoload.php
public $helpers = ['url', 'form', 'app'];
 
public $classmap = [
    'Slugger' => APPPATH . 'Libraries/Slugger.php',
];

$helpers memuat helper global, $classmap memetakan nama class ke file sehingga new Slugger() langsung ditemukan tanpa use. Namun untuk codebase besar, preferensikan service registration daripada classmap — lebih jelas dan teruji.

Memilih: Helper atau Library?

KriteriaHelperLibrary
BentukFungsi bebasClass dengan method
StateTidak menyimpan stateBisa menyimpan state
Contohsite_url(), format_rupiah()Email, Slugger, Encryption
RegenerasiBisa dimuat berulangBiasanya singleton via service

Aturan praktis: fungsi satu baris yang dipakai di view/controller → helper; logika multi-langkah yang berulang dan butuh konfigurasi → library + service.

Ringkasan Helpers & Libraries

  • Helper bawaan: url, form, html, text, cookie, number, date, filesystem, string, array, security.
  • Custom helper di app/Helpers/ dengan if (! function_exists(...)).
  • Custom library di app/Libraries/; daftarkan sebagai service di Config/Services.php.
  • Autoload.php untuk helper global dan classmap.

Penutup

Inti yang harus dibawa pulang:

  • Helper = fungsi bebas, Library = class — pilih sesuai kompleksitas.
  • Daftarkan helper umum di BaseController; helper khusus dipanggil saat dibutuhkan.
  • Service (\Config\Services::slugger()) memberikan singleton yang rapi.
  • Hindari duplikasi: kode yang dipakai dua tempat atau lebih layak di-abstraksi.

Di episode 11 selanjutnya kita akan membahas email & notifications — Email library dengan SMTP, template email HTML, serta praktik reset password lewat email yang mengirim token dan link ke user. Siapkan akun SMTP (misalnya Mailtrap untuk development)!

Belajar CodeIgniter - Helpers & Libraries | Belajar CodeIgniter