Kamis, 31 Juli 2014

Membuat Controller Fuel PHP


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 */

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'),
);

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'),
);

 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