Memahami Lebih Dalam Controller
Apa tugas utama Controller?
Controller adalah jantungnya aplikasi yang bertugas meng-handle HTTP request.
Coba perhatikan URL berikut:
example.com/index.php/blog/Jika kita membuka URL tersebut, maka Codeigniter akan mencari Controller bernama Blog. Lalu si Controller Blog akan meng-handle request kita.
Meng-handle dapat kita artikan dengan:
- Menerima HTTP request;
- Memprosesnya;
- Mengirim HTTP response.
Jadi itulah tugas utama dari Controller.
Tapi ada juga yang memberi tugas Controller untuk menentukan logika bisnis.
Saya tidak bilang ini salah, tapi di bagian memproses HTTP request.. kita memang harus meproses sesuai dengan logika bisnis yang ditentukan.
Akan tetapi, menulis semua logika bisnis di dalam Controller akan membuat kode kurang rapi dan sulit di test.
Karena itu, ada juga yang menyarankan:
Sebaiknya logika bisnis ditulis di dalam model atau membuat layer tesendiri seperti pada repository/service pattern.
Aturan Membuat Controller
1. Penulisan nama File
File Controller harus dibuat di dalam folder application/controllers dan penulisan nama filenya harus diawali dengan huruf besar.
✅ Contoh benar:
Blog.php
Product.php❌ Contoh salah:
blog.php
product.phpJika nama terdiri dari dua suku kata atau lebih, boleh dipisah dengan underscore.
Contoh:
Pendaftaran_siswa.php2. Penulisan nama Class
File Controller berisi sebuah class, cara menulis nama class harus diawali dengan huruf kapital. Kalau bisa ikuti nama filenya.
❌ Contoh salah:
<?php
class blog extends CI_Controller {
}✅ Contoh yang benar:
<?php
class Blog extends CI_Controller {
}Jika nama terdiri dari dua suku kata atau lebih, bisa dipisah dengan underscore.
Contoh:
<?php
class Account_info extends CI_Controller {
}Nanti pada URL akan diakses dengan:
example.com/index.php/account_info/Atau kita juga bisa membuat aliasnya di config/routes.php.
3. Penulisan nama Method
Nama method ditulis dengan huruf kecil dan jika terdapat lebih dari satu suku kata, bisa dipisah dengan underscore.
Contoh:
<?php
class Blog extends CI_Controller {
public function index()
{
echo 'Hello World!';
}
public function comments()
{
echo 'Look at this!';
}
}4. Folder untuk Controller
Kita juga bisa membuat sub folder di dalam folder application/controllers untuk mengelompokan Controller.
Contoh:
📂 admin/
📜 Dashboard.php
📜 Product.php
📜 Report.php
📜 Setting.php
📂 member/
📜 Overview.php
📜 Transaction.php
📜 Profile.phpLalu kita bisa memberikan default route untuk masing-masing folder pada config/routes.php seperti ini:
<?php
$routes['admin'] = 'admin/dashboard';
$routes['admin/product'] = 'admin/product';Input dan Output di Controller
Pada controller, kita bisa mengambil input dari properti $this->input dan untuk menghasilkan output kita bisa gunakan echo, load->view, dan properti $this->output.
Empat Macam Input Dasar
Ada empat macam yang bisa kita dapatkan di Controller dengan properti $this->input:
$this->input->post()untuk mengambil input dari form yang menggunakan metode POST untuk pengiriman data;
$this->input->get()untuk mengambil input dari query string atau form yang menggunakan metode GET untuk pengiriman data;
$this->input->cookie()untuk mengambil input dari cookie browser;
$this->input->server()untuk mengambil input dari server;
Sebenarnya kita juga bisa memanfaatkan variabel global bawaan PHP seperti $_POST, $_GET, $_COOKIE, dan $_SERVER.
Apa bedanya variabel tersebut dengan $this->input?
Bedanya:
Mengambil input dari $this->input lebih aman, karena sudah di-filter dan diproteksi XSS serta CSRF.
Untuk mempelajari lebih lanjut tentang properti $this->input di Controller, silahkan baca di dokumentasinya
Membuat Output
Output akan menjadi HTTP Response dari request yang diterima oleh Controller.
Kita bisa membuat output dengan fungsi echo(), print(), dan fungsi output lainnya.
Tapi biasanya, kita menampilkan sebuah view dengan fungsi:
$this->load->view('nama_view');Sebenarnya fungsi tersebut menjalankan perintah echo() juga.
Header untuk Output
Codeigniter menyediakan properti khusus untuk menentukan header dan output tertentu yang kita inginkan.
Misalnya:
Kita ingin membalas sebuah HTTP request dengan file PDF.
Maka kita tinggal set header untuk HTTP response dan mengirim file PDF-nya pada body HTTP response.
Contoh kodenya:
$this->output->set_content_type('pdf')
->set_output('dokument.pdf');Contoh untuk response JSON:
$data = [
'nama' => 'petanikode',
'email' => 'info@petanikode.com'
];
$this->output->set_content_type('json')
->set_output($data);Fungsi $this->output dapat kamu pelajari lebih lengkap di dokumentasi Class Output
Private Method di Controller
Jika kita membuat method pada controller dengan modifier private, maka method tersebut tidak akan bisa diakses dair publik atau URL.
Contoh:
<?php
class Blog extends CI_Controller {
public function index()
{
echo 'Hello World!';
}
private function _utility()
{
echo 'Look at this!';
}
}Coba akses controller tersebut melalui URL:
example.com/index.php/blog/_utilityMaka pasti tidak akan bisa.
Method private biasanya dipakai untuk fungsi tambahan seperti utility dan hanya bisa dipanggil pada class itu sendiri.
Apa bedanya method index() dengan __construct()?
Method index() adalah method yang akan dijalankan secara default saat kita mengakses nama controller.
Contoh:
<?php
class Blog extends CI_Controller {
public function index()
{
echo 'Hello World!';
}
public function comment()
{
echo 'Look at this!';
}
}Maka saat membuaka URL:
example.com/index.php/blog/Method index() yang akan dieksekusi.
Sedangkan method __costruct() adalah method yang akan selalu dieksekusi setiap kita mengakses Controller, entah kita mau akses method apapun.
Biasanya method __construct() digunakan untuk inisialiasi atau persiapan awal.
Contoh:
<?php
class Blog extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('post');
}
public function index()
{
echo 'Hello World!';
}
public function comment()
{
echo 'Look at this!';
}
}Pada contoh tersebut, kita melakukan load model pada method __construct(), ini akan membuat model post di-load otomatis pada Controller Blog.
Menjalankan Controller dari CLI
Selain di akses melalui URL, Controller bisa juga kita jalankan melalui CLI (Command Line Interface).
Memangnya buat apa menjalankan Controller dari CLI/CMD?
Kadang ini kita butuhkan untuk mengeksekusi CORN jobs di server.
Cara mengeksekusi Controller dari CLI adalah dengan mengeksekusi file index.php lalu diberikan argumen dengan nama controller dan method.
Contoh:
Kita punya controller seperti ini:
<?php
class Notification extends CI_Controller
{
public function send_remainder($message){
print("Remainder: $message");
}
}Maka perintah untku menjalankannya adalah:
php index.php notification send_remainder 'Hello'

Komentar
Posting Komentar