Controller adalah sebuah class yang dapat diakses melalui URL dan berfungsi menangani berbagai request. Proses pada FuelPHP juga dikendalikan oleh controller. Sebagai contoh, apabila terdapat URL localhost/fuelphp/public/blog/read, maka blog merupakan nama class dari controller, sedangkan read merupakan sebuah method dalam controller. Mari kita asumsikan bahwa URL tersebut belum dimodifikasi melalui route.
Membuat Controller Pertama
Kita akan membuat sebuah controller pertama yaitu menampilkan Hello World. Langkah pertama, buatlah sebuah berkas dengan nama blog.php dan simpan pada direktori fuel/app/classes/controller. Isi dari berkas tersebut bisa dilihat pada contoh skrip di bawah.
<?php
/**
* Blog controller
*
*/
class Controller_Blog extends Controller {
public function action_hello() {
echo 'Hello World!';
}
public function action_index() {
echo 'Halaman Utama';
}
}
/* APPPATH/classes/controller/blog.php */
/**
* Blog controller
*
*/
class Controller_Blog extends Controller {
public function action_hello() {
echo 'Hello World!';
}
public function action_index() {
echo 'Halaman Utama';
}
}
/* APPPATH/classes/controller/blog.php */
Untuk mengetahui controller tersebut berfungsi, cobalah akses URL localhost/fuelphp/public,akan muncul tampilan seperti berikut
lalu akses localhost/fuelphp/public/blog/hello (berikutnya disebut blog/hello). Apabila tidak terjadi kesalahan syntax, browser akan menampilkan teks "Hello World!". Selamat, kita sudah berhasil membuat controller pertama.
Method dengan nama action_index merupakan method spesial. Dimana method ini akan dijalankan apabila segmen kedua tidak didefinisikan melalui URL. Sebagai contoh localhost/fuelphp/public/blog akan menghasilkan output yang sama dengan localhost/fuelphp/public/blog/index.
Aturan pembuatan controller:
- Nama berkas dibuat dengan huruf kecil semua, misal : blog.php atau user.php.
- Setiap nama class yang dipisahkan dengan tanda _ (underscrore), harus diawali dengan huruf kapital, misal: Controller_Blog atau Controller_Admin_User.
- Sistem penamaan class lainnya (selain poin 2) mengacu pada standar class PHP.
- Tidak diperkenankan menggunakan bahasa alay, misal : ConTroll3R_bLo9_akOO
Router
Sistem routing pada FuelPHP masih seperti kebanyakan framework PHP, dimana mapping dibuat otomatis antara URL dengan controller. Kita tidak perlu mendefinisikan satu persatu request dan response. Seselesainya kita membuat controller, seketika itu controller tersebut dapat diakses langsung melalui browser.
Oh ya, sebagai tambahan ada dua predefined route, yaitu _root_ dan _404_. Mari kita sedikit bermain-main dengan route ini. Buka berkas fuel/app/config/routes.php. Secara bawaan, isi dari berkas tersebut adalah seperti ini:
<?php
return array(
'_root_' => 'welcome/index', // The default route
'_404_' => 'welcome/404', // The main 404 route
'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);
return array(
'_root_' => 'welcome/index', // The default route
'_404_' => 'welcome/404', // The main 404 route
'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);
Disana didefinisikan _root_ berisi nilai welcom/index. Route ini merupakan default route yang akan dijalankan apabila kita tidak menyertakan nama controller pada URL. Dalam hal ini, route akan merespon controller welcome (Controller_Welcome) dan method index (action_index). Sedangkan _404_ merupakan error handling route untuk halaman dengan respon yang tidak ditemukan. Biasanya digunakan untuk sebuah halaman 404.
Coba kita modifikasi sedikit berkas tersebut sehingga menjadi seperti ini:
<?php
return array(
'_root_' => 'page/index', // The default route
'_404_' => 'page/404', // The main 404 route
'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);
return array(
'_root_' => 'page/index', // The default route
'_404_' => 'page/404', // The main 404 route
'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);
Dan buat controller seperti di bawah:
<?php
/**
* Page controller
*/
class
Controller_Page
extends
Controller {
public
function
action_index() {
echo
'Halaman Index'
;
}
public
function
action_404() {
exit
(
'Bloody Hell! 404 : Page not found!'
);
}
}
/* APPPATH/classes/controller/page.php */
Untuk mengetahui route tersebut mengembalikan respon yang sempurna, cobalah akses URL localhost/fuelphp/public/ (tanpa menyebutkan controller). Sekarang cobalah akses URL localhost/fuelphp/public/i-am-alien, dan lihat hasilnya. :)
Prefix Controller dan Method
Mari abaikan namespace terlebih dahulu dan kita ikuti standar FuelPHP. Setiap nama class controller harus dibubuhi awalan (prefix) Controller_, misal kita akan membuat controller blog, maka nama class-nya menjadi Controller_Blog. Prefix ini bisa diubah sesuai keinginan melalui config utama. Bahasan mengenai prefix controller ini akan dijabarkan pada tulisan lain.
Apabila controller disimpan dalam sub-direktori, misalnya direktori fuel/app/classes/controller/admin, maka nama sub-direktori tersebut juga dicantumkan dalam nama class-nya. Sebagai contoh, kita membuat controller blog dalam direktori admin, sehingga nama class-nya menjadi Controller_Admin_Blog. Semakin dalam penyimpan controller pada sub-direktori, semakin panjang pula prefixnya. Jadi, bijaklah dalam mengorganisir berkas controller. Berikut contoh sederhana nama class controller dalam sub-direktori.
<?php
/**
* Blog admin controller
*
*/
class
Controller_Admin_Blog
extends
Controller {
public
function
action_hello() {
echo
'Hello'
;
}
}
/* APPPATH/classes/controller/admin/page.php */
Jika kita perhatikan, selain controller, ternyata setiap method juga mempunyai prefix, yaitu action_. Apa pentingnya prefix ini? Mari kita bayangkan seandainya FuelPHP tidak memberlakukan prefix untuk setiap method, kemudian kita ingin membuat URL blog/list tanpa mengaturnya melalui route. Maka isi skripnya kurang lebih menjadi begini.
<?php
/**
* Blog admin controller
*
*/
class
Controller_Blog
extends
Controller {
public
function
list() {
echo
'Hello'
;
}
}
/* APPPATH/classes/controller/blog.php */
Apabila kita menjalankan controller tersebut melalui browser, maka akan menampilkan pesan error yang kira-kira isinya begini:
syntax error, unexpected 'list' (T_LIST), expecting identifier (T_STRING)
Kenapa bisa begitu? Karena list, merupakan fungsi native PHP dan merupakan reserved words yang tidak diizinkan untuk digunakan dalam penamaan class, function atau method yang kita buat sendiri. Jadi, prefix action_ berfungsi untuk menghindari adanya konflik penamaan method dalam controller dengan reserved words PHP.
HTTP Method
Selain menambahkan prefix action, method dalam controller juga dapat menggunakan prefix lain, yaitu get_ dan post_. Sebagai contoh penamaan misalnya get_index() atau post_contact(). Apabila menggunakan get, maka method tersebut hanya akan dijalankan apabila terdapat request GET. Begitu juga untuk post, hanya dijalankan apabila terdapat request POST.
<?php
/**
* Page controller
*
*/
class
Controller_Page
extends
Controller {
public
function
get_contact() {
echo
'Hanya akan ditampilkan apabila request GET'
;
// digunakan untuk menampilkan form contact
}
public
function
post_contact() {
echo
'Hanya akan dijalankan apabila terdapat request POST'
;
// untuk proses kirim email melalui form contact
}
}
/* APPPATH/classes/controller/page.php */
Magic Method
Terdapat dua magic method yang dapat kita gunakan pada controller yaitu before dan after. Method before mempunyai fungsi yang sama persis dengan magic method bawaan PHP, yaitu __construct. Jangan menggunaan method __construct jika kalian tidak paham apa yang harus dilakukan dan yakin apa yang kalian lakukan tidak menggangu core FuelPHP. Jika before dijalankan pre-controller, maka after merupakan method post-controller.
<?php
/**
* Blog controller
*/
class
Controller_Blog
extends
Controller {
public
function
before() {
parent::before();
// do something here
}
public
function
action_index() {
return
View::forge(
'blog/index'
);
}
public
function
after() {
parent::after();
// do something here
}
}
/* APPPATH/classes/controller/blog.php */
OK jika kalian familiar atau pernah menggunakan framework PHP lain, misal CodeIgniter atau Laravel, membuat controller di FuelPHP bukan suatu masalah besar. Karena pada dasarnya konsep pembuatannya serupa.
Pembahasan mengenai Controller tidak berhenti sampai disini, kita akan melanjutkan nya di tutorial selanjutnya :D :D: D :D
SRC : http://www.fuelphp.yugo.my.id/post/tutorial/membuat-controller
Tidak ada komentar:
Posting Komentar