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.phpClass 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:
Berlanjut Controller CakePHP - Part 2$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’);
No comments :
Post a Comment