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.php

Jika nama terdiri dari dua suku kata atau lebih, boleh dipisah dengan underscore.

Contoh:

Pendaftaran_siswa.php

2. 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.php

Lalu 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 echoload->view, dan properti $this->output.

Empat Macam Input Dasar

Ada empat macam yang bisa kita dapatkan di Controller dengan properti $this->input:

  1. $this->input->post() untuk mengambil input dari form yang menggunakan metode POST untuk pengiriman data;
  1. $this->input->get() untuk mengambil input dari query string atau form yang menggunakan metode GET untuk pengiriman data;
  1. $this->input->cookie() untuk mengambil input dari cookie browser;
  1. $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/_utility

Maka 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

Postingan populer dari blog ini

IP

Scala

Variabel Dan Tipe Data