Controller
Pendalaman mengenai komponen Controller.
Pengantar
Controller merupakan class PHP yang memegang peranan penting dalam aplikasi berpola MVC karena merupakan komponen utama yang menentukan bagaimana sebuah HTTP request dari user ditangani. Controller dapat memberikan lebih dari satu tindakan sebagai bentuk dari proses request tersebut yang kemudian harus disertai dengan tanggapan dari proses request tersebut.
Controller bertanggung jawab untuk mengendalikan logika dari aplikasi (business-logic) dan bertindak sebagai koordinator antara Model, Presenter dan View. Controller menerima request dari pengguna melalui View yang kemudian data permintaan tersebut diproses dengan bantuan Model lalu mempresentasikannya kembali ke View dengan bantuan Presenter.
Lokasi Controller
Seluruh file Controller harus ditempatkan di dalam direktori khusus dengan nama Controllers. Directory Controllers dapat ditempatkan pada direktori utama aplikasi anda ataupun oleh module-module dari aplikasi anda.
Membuat Controller
Agar lebih mudah memahami pendalaman mengenai Controller, kita akan mempelajarinya melalui sebuah kasus sederhana, yaitu membuat Controller bernama Articles.
Melalui Console
Cara termudah membuat controller pertama kali adalah melalui O2System Console, dengan perintah:
Option-option yang tersedia lainnya adalah:
Opsi
Shortcut
Aturan
Keterangan
--name
-n
required
Menentukan nama class dari Controller
--path
-p
optional
Menentukan penempatan di direktori lain, selain direktori default, yaitu app/Controllers/
--namespace
-ns
optional
Menentukan namespace lain, selain namespace default, yaitu App\Controllers
Melalui Editor
Buatlah sebuah file Controller berekstensi php dan simpanlah pada directory Controllers, berisikan kode seperti pada contoh dibawah ini:
Berikut adalah contoh dasar dari penulisan source code sebuah Controller:
Pola URI Controller
Didalam O2System Framework telah terdapat Router Service yang secara pintar dapat melakukan routing secara otomatis mengarah kepada lokasi Controller aplikasi anda. Pola URI Controller dasar yang dapat dikenali O2System Framework secara mendasar adalah sebagai berikut:
Pola URI diatas merupakan pola URI segmentasi, yang apabila diuraikan secara segmentasi adalah sebagai berikut:
Segment (n)
Segment (k)
Segment (v)
1
class
[class]
2
method
[method]
3
arguments
[arguments]
(n) adalah Number, (k) adalah Key, (v) adalah Value
Pola URI untuk mengakses Controller dapat menjadi lebih kompleks, anda dapat mempelajarinya lebih lanjut pada pendalaman mengenai URI dan Router.
Metode Pada Controller
Metode pada Controller merupakan action yang akan dieksekusi ketika Controller diakses melalui URI.
Penulisan Nama Metode Pada Controller
Format penulisan nama metode pada Controller wajib dideklarasikan dengan format camelCase sesuai dengan PSR-1: Basic Coding Standards.
Sedangkan format penulisan pada URI sebaiknya dituliskan dengan format dash sesuai dengan aturan Search Engine Friendly URL.
Contoh:
Jika anda memiliki class Controller dengan nama Tutorial dan metode dengan nama helloWorld, seperti dibawah ini:
Untuk mengaksesnya URI sebaiknya dituliskan seperti dibawah ini:
Aturan Dasar Eksekusi Metode Pada Controller
Apabila pada URI hanya terdapat satu (1) segment saja yaitu segment key class, maka secara otomatis metode yang akan dieksekusi adalah index.
Apabila metode index atau metode yang dicari tidak terdapat pada Controller maka secara otomatis sistem akan mengeluarkan error 404 - Page Not Found.
Apabila terdapat metode route maka seluruh permintaan secara otomatis akan dialihkan ke metode route.
Metode yang dapat diakses hanyalah metode dengan visibility public.
Metode Reserved
Metode __reconstruct
Metode __reconstruct adalah metode yang otomatis dieksekusi setelah Controller di-inisasi oleh sistem, yang berfungsi sebagai tempat untuk menuliskan source code logic tambahan yang biasa kita tuliskan di metode __construct.
Example
Metode Index
Metode index akan otomatis dieksekusi apabila pada URI hanya terdapat (1) segment yaitu segment key class saja.
Keadaan lain yang akan menyebabkan metode index otomatis dieksekusi adalah apabila anda mendefinisikan index method dapat menerima argumen dan segment key argument terdefinisi nilainya.
Reference
Example
Metode Route
Router method merupakan sebuah metode yang memiliki prioritas tertinggi yang berfungsi untuk melakukan internal routing pada Controller yang berperan sebagai pengambil alih tugas sistem router melalui Controller.
Reference
Name
Type
Requirement
Description
$method
String
Required
Nama metode controller yang akan dipanggil berasal dari key segment method.
$arguments
Array
Optional
Argument-argument yang akan di-passing ke metode controller yang akan dipanggil berasal dari key segment arguments.
Example
Mengorganisir Controller Pada Sub-Folders
Ketika kita membangun aplikasi berskala besar akan sangat nyaman untuk melakukan organisir file-file Controller ke dalam sub-folders sesuai peruntukkannya. O2System Framework sudah memfasilitasi anda untuk hal ini.
Hal penting yang harus anda perhatikan adalah nama dari namespace controller anda harus sesuai dengan ketentuan PSR-4: Autoloader seperti contoh file controller dibawah ini:
Memanggil Service Pada Controller
Pada O2System Framework Controller seluruh service dapat diakses melalui property class Controller dengan menggunakan $this
, hal ini dapat dilakukan karena O2System menggunakan pola design pattern Singleton pada Kernel-nya.
Built-in Controllers
Berikut ini adalah daftar Controller yang secara default sudah tersedia pada O2System Framework sesuai dengan peruntukkannya masing-masing:
Error Controller
Controller ini secara default diperuntukkan untuk memberikan respon halaman error, dengan pesan berdasarkan nomor kode error.
Untuk dapat memahami cara kerja dari Controller ini, bukalah browser anda dan ketikkan URL:
Images Controller
Controller ini secara default diperuntukkan untuk mengakses file-file gambar/image yang tersimpan dalam directory storage/images dan sekaligus sebagai penyedia service manipulasi gambar on-the-fly.
Untuk dapat memahami cara kerja dari Controller ini:
Simpan gambar dibawah ini pada path
/path/to/storage/images/cars/aventador.jpg
Bukalah browser anda dan ketikkan URL:
http://example.com/images/cars/200x200/aventador.jpg
Secara otomatis gambar Lamborghini Aventador yang anda simpan akan tampil pada ukuran 200x200 pixel pada browser anda.
Pola URI yang dikenali oleh Images Controller:
Original Image
http://example.com/images/[sub-directory]/[filename]
Resize Image
http://example.com/images/[sub-directory]/[width]x[height]/[filename]
Resize Image by Query Parameter
http://example.com/images/[sub-directory]/[filename]?width=[pixel]&height=[pixel]&quality=[percent]&crop=[bool]
Parameter
Value
width
(int) pixel size
height
(int) pixel size
scale
(int) percentage
quality
(int) percentage
crop
(bool) true/false using centre auto crop.
Pages Controller
Controller ini secara default diperuntukkan untuk mengakses file-file PHTML yang terdapat dalam directory Pages.
Untuk memahami cara kerja dari controller ini anda dapat mendalaminya pada bagian mengenai Page.
Restful Controller
Controller ini secara default diperuntukkan sebagai base-controller dari aplikasi restful.
Untuk memahami cara kerja dari controller ini anda dapat mendalaminya pada bagian mengenai Restful.
Storage Controller
Controller ini secara default diperuntukkan untuk mengakses file-file yang tersimpan dalam directory storage dan sekaligus sebagai penyedia service file download.
Untuk dapat memahami cara kerja dari Controller ini:
Simpan sebuah file pdf pada path
/path/to/storage/files/test.pdf
Bukalah browser anda dan ketikkan URL
http://example.com/storage/files/test.pdf
Secara otomatis file PDF tadi akan langsung ditampilkan sedangkan bila anda mengetikkan URLhttp://example.com/storage/download/files/test.pdf
Maka secara otomatis file PDF tadi akan langsung mengalami proses download file melalui browser.
Pola URI yang dikenali oleh Storage Controller:
Original File
http://example.com/storage/[sub-directory]/[filename]
Download File
http://example.com/storage/download/[sub-directory]/[filename]
Websocket Controller
Controller ini secara default diperuntukkan sebagai main-controller dari aplikasi websocket.
Untuk memahami cara kerja dari controller ini anda dapat mendalaminya pada bagian mengenai Websocket.
Last updated