Saturday, 20 July 2013

Controller CakePHP - Part 1

         
Controller adalah huruf ‘C’ pada singkatan dari MVC. Setelah routing telah dilakukan dan controller yang tepat telah ditemukan, maka controller itu akan dipanggil. Controller bertugas untuk memahami permintaan (request) data, memilih MODEL dengan tepat untuk dipanggil, dan memberikan VIEW yang tepat. Controller bertindak sebagai pemikir di antara MODEL dan VIEW.

           Pada umumnya, controller digunakan untuk mengatur (manager) logika pada sebuah MODEL. Contohnya, jika ingin membangun sebuah web untuk sebuah online bakery,kita mungkin memiliki recipeController dan IngredientsController yang mengatur resep dan komposisi. Hal ini berarti controller digunakan untuk lebih dari satu (1) MODEL.


          Controller menyediakan beberapa methods yang disebut sebagai “actions”. Actions adalah methods dalam controller yang menangani request. Secara default semua public methods dalam sebuah controller adalah sebuah actions, dan dapat diakses dengan url. Actions bertugas memahami request dan membuat responnya. Biasanya respon berupa form yang diberikan view, tetapi ada banyak cara untuk membuat respon dengan baik.


AppController


          AppController class adalah sebuah parent class untuk semua controller aplikasi. AppController memperluas Controller class termasuk dalam CakePHP core library. AppController didefinisikan pada file /app/Controller/AppController.php yang berisi seperti berikut:


class AppController extends Controller{

}


Methods dan attribute Controller dibuat  dalam AppController class yang akan berguna untuk semua controller aplikasi. AppController adalah tempat untuk membuat kode/script semua controller.

Components dan helpers digunakan secara khusus oleh controller. Untuk itu jangan lupa menambahkan default html dan form helpers,jika ingin men-define var $helpers dalam AppController, dan jangan lupa juga untuk memanggil AppController’s callbacks dalam child controller callbacks untuk hasil yang baik. Contoh:


Public function beforeFilter() {

                Parent::beforeFileter();

}


Request Parameters


          Ketika sebuah request dikirim ke aplikasi CakePHP, maka router CakePHP dan class Dispatcher menggunakan routes Configuration untuk menemukan dan menciptakan controller yang tepat. Request data dibungkus (enkapsulasi) ke dalam request object (silahkan pelajari CakeRequest). CakePHP mengambil semua informasi penting ke dalam property  $this->request .

Controller actions.


          Controller actions bertugas untuk mengkonversi Request Parameter. Kembali pada contoh web “bakery” di awal, RecipesController mengandung function view(), share(),  dan search () actions.


Controller akan ditemukan pada /app/Controller/RecipesController.php dan di dalamnya terdapat function seperti berikut:

#/app/Controller/RecipesController.php
Class RecipesController extends AppController{
          Public functions view ($id){
                   //logika dari actions script ditulis disini
          }
          Public function share($customerId,$recipeId){
                  //logika dari actions script ditulis disini
          }
          Public function search ($query) {
              // logika actions script ditulis disini
          }
}

          File VIEW untuk actions ini akan dijadikan app/View/Recipes/view.ctp, app/View/Recipes/share.ctp, dan app/View/Recipes/search.ctp.

          Actions Controller pada umumnya menggunakan set() untuk menciptakan VIEW yang berguna untuk memberikan tampilan. Karena conventions yang digunakan CakePHP, maka tidak dibutuhkan  untuk membuat dan memberikan tampilan secara manual.

Ketika controller methods digunakan, function requestAction() akan sering digunakan setiap kali mengembalikan data yang bukan string. Jika mempunyai method controller yang digunakan untuk web request + requestAction maka seharusnya mengecek tipe dari request sebelum dikembalikan (return valuenya) seperti:


Class RecipesController extends AppController {
Public function popular () {
                $popular = $this->Recipe->popular();
                If(!empty($this->request->params[‘requested’])){
                Return $popular;
}
$this->set(‘popular’,$popular);
}
}

            Kode di atas adalah contoh controller action bagaimana method dapat digunakan dengan requestAction() dan normal request. Pengembalian sebuah array data ke non-requestAction request akan menyebabkan error dan harus dihindari (pelajari Controller::requestAction() untuk mempelajari tentang requestAction() )

Untuk menggunakan controller secara efektif kita perlu meng-kover beberapa attribute core (core attributes) dan methods yang disediakan oleh CakePHP controller.


Request Life-cycle callbacks


Class controller


CakePHP controllers  mempunyai callbacks yang dapat digunakan untuk memasukkan logika seputar request life-cycle:

Controller::beforeFilter()

                Fungsi ini dieksekusi sebelum action dalam controller.  Fungsi ini adalah tempat yang berguna untuk memeriksa  session yang aktif atau menginspeksi user permissions.


Controller::beforeRender()

                Dipanggil setelah logika action logic, tetapi sebelum view diberikan. Callback ini jarang digunakan, tetapi dibutuhkan ketika memanggil render() secara manual sebelum akhir dari action.


Controller::afterFilter()

                Digunakan setelah controller action, dan setelah pemanggilan selesai. Fungsi ini controller method terakhir yang dijalankan.

Selain controller life-cycle callbacks, Components juga menyediakan fungsi yang sama.


Controller Methods


Interaksi dengan Views

Controller berinteraksi dengan view dengan beberapa cara. Pertama mereka dapat  mengirim data ke views menggunakan set(). Dapat juga menentukan view class yang digunakan dan file view yang akan diberikan dari controller

Controller::set(string $var,mixed $value)

The set() method adalah cara utama untuk mengirim data dari controller ke view.

//mengirim data dari controller;
$this->set(‘color’, ‘pink’);
//kemudian, dalam view, dapat menggunakan data:?>
Kamu telah memilih untuk warna rotimu



Fungsi set() method juga mengambil associative array sebagai parameter pertama. Fungsi ini dapat menjadi cara cepat untuk menentukan view:

$data = array(

‘color’ => ‘pink’,

‘type ’=> ‘sugar’,

‘base_price’=>3000

);

//membuat $color,$type dan $base_price

$this->set($data);

The attribute $pageTitle tidak tersedia,menggunakan set()  untuk membuat title:

$this->set(‘title_for_layout’,’ ini adalah halaman judul’);
Berlanjut Controller CakePHP - Part 2

No comments :

Post a Comment