3.5.2 Atribut Controller (Controller Attributes)

Daftar lengkap dari artibut controller dan deskripsinya tersedia di CakePHP API. Silahkan cek http://api.cakephp.org/1.2/class_controller.html.

3.5.2.1 $name

Pengguna PHP4 harus memulai definisi controller dengan menggunakan atribut $name. Atribut $name harus di set sebagai nama dari controller. Pada umumnya ini hanya merupakan nama dalam bentuk jamak (dalam bahasa Inggris) dari dari model utama yang digunakan di dalam controller ini. Hal ini dilakukan untuk mengatasi beberapa masalah pada penamaan class di PHP4 sekaligus membantu CakePHP mengatasi masalah penamaan.

<?php

#   $name contoh penggunaan atribut controller 

class RecipesController extends AppController {
   var $name = 'Recipes';
}

?>	
  1. <?php
  2. # $name contoh penggunaan atribut controller
  3. class RecipesController extends AppController {
  4. var $name = 'Recipes';
  5. }
  6. ?>

3.5.2.2 $components, $helpers and $uses

Atribut berikut ini akan sangat sering anda gunakan. Atribut inilah yang memberitahu CakePHP helper, component, dan model apa saja yang akan anda gunakan pada controller yang sedang anda kembangkan. Dengan menggunakan atribut - atribut ini, class - class MVC ini akan tersedia di controller sebagai variabel class (contohnya : $this->ModelName).

Harap diingat, beberapa controller memiliki beberapa class - class tersebut secara default, jadi mungkin saja anda tidak perlu mengkonfigurasi controller sama sekali.

Secara default, controller memiliki akses kepada model primarinya. RecipesController akan mempunyai akses kepada model Recipe dengan $this->Recipe, dan ProductsController juga mempunyai akses terhadap model Product dengan $this->Product.

Helper Html, Form dan session selalu tersedia secara default seperti halnya SessionComponnet. Untuk mempelajari lebih lanjut tentang class - class ini, pastikan ada mengecek petunjuk lebih detail untuk masing - masing bagian tersebut di dalam manual ini.

Mari kita lihat bagaimana caranya controller CakePHP menggunakan class MVC lainnya.

<?php
class RecipesController extends AppController {
    var $name = 'Recipes';

    var $uses = array('Recipe', 'User');
    var $helpers = array('Ajax');
    var $components = array('Email');
}
?>   
  1. <?php
  2. class RecipesController extends AppController {
  3. var $name = 'Recipes';
  4. var $uses = array('Recipe', 'User');
  5. var $helpers = array('Ajax');
  6. var $components = array('Email');
  7. }
  8. ?>

Setiap variabel ini digabung (merge) dengan inherited values, oleh karena itu tidak perlu mendeklarasikan ulang helper Form, atau lainnya yang dideklarasikan di App controller.

Ada beberapa atribut di controller CakePHP yang memberikan anda kontrol bagaimana views anda diset didalam sebuah layout.

Atribut $layout dapat diset dengan nama dari layout yang disimpan di dalam /app/views/layouts. Anda dapat menentukan sebuah layout dengan menset $layout sesuai dengan nama berkas (file) layout, tanpa ekstensi .ctp. Jika atribut ini tidak didefinisikan, maka CakePHP akan merender layout default, default.ctp. Jika anda belum membuat file layout default di /app/views/layouts/default.ctp, maka layout default dari inti CakePHP-lah yang akan dirender.

<?php

//   Menggunakan $layout untuk mendefinisikan layout alternatif

class RecipesController extends AppController {
    function quickSave() {
        $this->layout = 'ajax';
    }
}

?>
  1. <?php
  2. // Menggunakan $layout untuk mendefinisikan layout alternatif
  3. class RecipesController extends AppController {
  4. function quickSave() {
  5. $this->layout = 'ajax';
  6. }
  7. }
  8. ?>

Anda juga bisa merubah title (judul) dari sebuah halaman (terletak di atas bar dari perambah (browser) anda) dengan menggunakan $pageTitle. Agar hal ini dapat bekerja dengan benar, layout anda harus memasukkan variabel $title_for_layout, yang diletakkan di antara tag <title> dan </title> pada bagian awal dokumen HTML.

<?php

//   Menggunakan $pageTitle untuk mendefinisikan judul halaman

class RecipesController extends AppController {
    function quickSave() {
        $this->pageTitle = 'My search engine optimized title';
    }
}

?>
  1. <?php
  2. // Menggunakan $pageTitle untuk mendefinisikan judul halaman
  3. class RecipesController extends AppController {
  4. function quickSave() {
  5. $this->pageTitle = 'My search engine optimized title';
  6. }
  7. }
  8. ?>

Anda juga bisa menset judul halaman dari dalam controller menggunakan $this->pageTitle (Anda harus memasukkan bagian $this->). Hal ini direkomendasikan, karena akan lebih baik untuk memisahkan bagian logika dari layout dan isi (content). Untuk halaman statis, anda harus mendefinisikan $this->pageTitle di dalam view untuk mendapatkan judul kustom (yang sesuai).

Jika $this->pageTitle tidak diset, maka judul halaman otomatis diganti dengan judul berdasarkan nama controller. Jika merupakan halaman statis, maka nama dari berkas (file) view lah yang akan digunakan sebagai judul.

3.5.2.4 Atribut Parameter ($params)

Pada controller CakePHP anda, parameter dari Controller terletak di $this->params . Variabel ini digunakan untuk menyediakan akses terhadap informasi dari request yang sekarang dipanggil. Kegunaan paling umum dari $this->params adalah untuk mendapatkan akses terhadap informasi yang sudah dikirimkan oleh controller melalui operasi POST atau GET.

3.5.2.4.1 form

$this->params['form']

Semua data POST dari form manapun disimpan disini, termasuk juga informasi di dalam $_FILES.

3.5.2.4.2 admin

$this->params['admin']

Bernilai 1 jika action yang dijalankan dipanggil melalui admin routing.

3.5.2.4.3 bare

$this->params['bare']

Bernilai 1 jika layout yang digunakan sekarang kosong, 0 jika tidak.

3.5.2.4.4 isAjax

$this->params['ajax']

Bernilai 1 jika request yang dipanggil sekarang adalah sebuah request ajax, dan 0 jika tidak. Variabel ini hanya akan mempunyai nilai jika RequestHandler Component sedang digunakan di dalam controller.

3.5.2.4.5 controller

$this->params['controller']

Menyimpan nama dari controller yang sedang menangani request. Sebagai contoh, jika requestnya /posts/view/1, maka isi $this->params['controller'] adalah "posts".

3.5.2.4.6 action

$this->params['action']

Menyimpan nama dari action yang sedang menangani request. Sebagai contoh, jika request nya adalah /posts/view/1, maka isi variabel $this->params['action'] adalah "view".

3.5.2.4.7 pass

$this->params['pass']

Menyimpan query string dari request yang dipanggil. Sebagai contoh, jika URL yang dipanggil adalah /posts/view/?var1=3&var2=4, $this->params['pass'] akan bernilai "?var1=3&var2=4".

3.5.2.4.8 url

$this->params['url']

Menyimpan URL yang sedang direquest bersama dengan pasangan key-value variabel GET. Sebagai contoh, jika URL /posts/view/?var1=3&var2=4 dipanggil, $this->params['url'] akan berisi:

[url] => Array
(
    [url] => posts/view
    [var1] => 3
    [var2] => 4
)

3.5.2.4.9 data

$this->data

Digunakan untuk menangani data POST yang dikirimkan dari FormHelper ke controller.

// FormHelper yang digunakan untuk membuat elemen form :
$form->text('User.first_name');
  1. // FormHelper yang digunakan untuk membuat elemen form :
  2. $form->text('User.first_name');

Ketika dirender akan terlihat seperti ini :

 
<input name="data[User][first_name]" value="" type="text" />

Ketika data form tersebut di-submit ke controller melalui POST, data tersebut tersimpan di this->data

 
// First name yang di-submit tersedia di :
$this->data['User']['first_name'];
  1. // First name yang di-submit tersedia di :
  2. $this->data['User']['first_name'];

3.5.2.4.10 prefix

$this->params['prefix']

Di set ke routing prefix. Sebagai contoh, atribut ini akan mengandung string "admin" selama request ke /admin/posts/someaction.

3.5.2.4.11 named

$this->params['named']

Stores any named parameters in the url query string in the form /key:value/. For example, if the URL /posts/view/var1:3/var2:4 was requested, $this->params['named'] would be an array containing:

[named] => Array
(
    [var1] => 3
    [var2] => 4
)

3.5.2.5 Atribut Lainnya

Anda bisa mengecek detail semua atribut controller di API, tetapi ada beberapa atribut controller yang dijelaskan di dalam bagian tersendiri di dalam manual ini.

Atribut $cacheAction bertujuan untuk meng-cache views, dan atribut $paginate digunakan untuk menset pagination default pada sebuah controlelr. Untuk informasi lebih lanjut mengenai bagaimana penggunaan atribut ini, silahkan lihat dokumentasi masing - masing atribut tersebut pada manual ini.