Membuat dan Menggunakan Helper di Laravel

Laravel sudah menyediakan puluhan helper yang dapat diakses secara global, baik di controller, model, view, atau di manapun kalian butuhkan. Semua helper tersebut dikelompokkan berdasarkan jenisnya, seperti helper array, string, path, url, dan miscellaneous.

Penamaan helper di Laravel mengacu kepada standar yang dibuat oleh PHP. Contoh, untuk fungsi memanipulasi data array, penamaannya dimulai dengan array_, semisal array_add() dan array_collapse(). Contoh lain misalnya, fungsi untuk memanipulasi string, dimulai dengan kata str_, semisal str_start() dan str_after().

Seandainya, kalian tidak dapat menemukan fungsi yang sesuai dengan kebutuhan dari yang disediakan Laravel (maupun PHP native), kalian juga dapat menambahkan sendiri fungsi sesuai dengan kebutuhan aplikasi. Tentunya, tidak wajib membuat nama fungsi sesuai dengan standar PHP. Namun, alangkah baiknya untuk mengikuti standar untuk menjaga konsistensi.

Mari kita mulai dengan membuat direktori Helpers dalam app. Kemudian buat berkas baru dalam direktori tersebut dengan nama string.php.

$ mkdir app/Helpers
$ touch app/Helpers/string.php

Isi dari file string.php tersebut nantinya berisi sekumpulan fungsi untuk memanipulasi string. Hanya fungsi, bukan method yang dikelompokkan ke dalam sebuah class.

Untuk contoh kasus, saya ingin menambahkan sebuah fungsi dengan nama str_increment(). Fungsi ini bertujuan untuk menambahkan angka di belakang sebuah string. Sebagai contoh string awal berupa “Laravel”, maka dengan menggunakan fungsi tersebut, nilai kembalinya menjadi “Laravel_1”.

if ( ! function_exists('str_increment'))
{
  /**
   * Add's _1 to a string or increment the ending number to allow _2, _3, etc
   *
   * @param	string	required
   * @param	string	What should the duplicate number be appended with
   * @param	string	Which number should be used for the first dupe increment
   * @return	string
   */
  function str_increment($str, $separator = '_', $first = 1)
  {
    preg_match('/(.+)'.preg_quote($separator, '/').'([0-9]+)$/', $str, $match);
    return isset($match[2]) ? $match[1].$separator.($match[2] + 1) : $str.$separator.$first;
  }
}

Ngomong-ngomong, fungsi str_increment() di atas saya ambil dari helper CodeIgniter. Hanya penamaan fungsinya saja yang saya ubah.

Sampai di sini, helper sudah berhasil dibuat. Namun belum bisa digunakan karena belum dimuat (di-load) di manapun.

Untuk memuatnya secara global, kita bisa mendaftarkan berkas string.php pada berkas konfigurasi Composer. Buka berkas composer.json dari direktori root, kemudian tambahkan berkas di atas pada bagian autoload sehingga menjadi seperti berikut.

"autoload": {
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files": [
        "app/Helpers/string.php"
    ]
},

Langkah terakhir, dump ulang autoload Composer agar helper string di atas dapat dimuat ulang.

$ composer dump-autoload

Untuk mengujinya, kalian bisa menggunakan Laravel Tinker, kemudian memanggil fungi str_increment() untuk mengembalikan sebuah nilai sesuai dengan kriteria di atas. Di bawah adalah contoh ujicoba helper string yang sudah saya buat untuk bahan tulisan ini.

Laravel Tinker

Ujicoba global helper menggunakan Laravel Tinker

Tinggalkan Balasan