Gunakan form dibawah untuk mencari aplikasi yg anda butuhkan via internet
Google

Senin, 12 Mei 2008

Konsep Dasar CakePHP (bag IV)

Mulai bagian ini anda harus pasang perhatian baik-baik. Pada manual resmi dari situs CakePHP.org sebelum Chapter Models ini ada satu chapter bernama Scaffold yang merupakan salah satu ‘hot feature’ dari Cake sendiri, dimana anda bisa membuat satu aplikasi lengkap cukup dengan menuliskan var $scaffold;, dan simsalabim!!! Akan tercipta aplikasi dengan action: index, add, edit, view, dan delete (sesuai dengan standar Cake, lengkap dari model hingga view.

Namun dalam membangun aplikasi sering kita melakukan kustomisasi, misal dalam data validation ataupun penambahan logic atau action tertentu. Jadi pembahasan pembuatan aplikasi dengan feature scaffolding dan Bake akan saya simpan dulu. Menurut hemat saya, jika kita memulai latihan dari yang berat, maka ketika kita diminta untuk ‘berlomba’ di level yang lebih ringan, semuanya akan terasa sangat mudah.

Section 1


Apakah Model Itu?

Dalam Chapter 2: Konsep Dasar, kita sudah menyinggung sedikit tentang konsep MVC, dimana Model menjadi bagian awalnya. Jika database ada di level presentation, maka Model berada pada level application logic. Boleh dikata bahwa suatu Model merupakan titik akses ke database, atau lebih tepatnya tabel di dalam database. Dalam konvensi Cake mengatur bahwa nama suatu tabel harus jamak, sedangkan nama Model merupakan bentuk tunggalnya (singular). Contoh: jika tabel bernama ‘users’ maka modelnya bernama ‘User’. Model juga dapat berisi validasi data, informasi asosiasi, dan metode lain yang berkaitan dengan tabel yang digunakan. Berikut contoh jika anda membuat Model User, yang kemudian disimpan di /app/model/user.php

//Untuk membuat model dalam Cake anda harus
menurunkannya dari AppModel
 
class User extends AppModel
{
    // Pastikan untuk memulai dengan mendifinasikan
variabel modelnya sendiri.
    var $name = 'User';
 
    // Kemudian diikuti validasi data.
    var $validate = array();
 
    // Dan sertakan asosiasi jika ada.
 
    var $hasMany = array('Image' =>
                   array('className' => 'Image')
                   );
 
    // Anda juga dapat menyertakan function buatan anda sendiri:
    function makeInactive($uid)
    {
        //Silahkan tulis logic-nya disini...
    }
}
 
?>

Section 2

Function dalam Model

Jika kita lihat contoh kode di atas dari sisi OOP/PHP, suatu model adalah suatu class yang merupakan turunan dari AppModel. Class AppModel sendiri aslinya terletak dalam direktori /cake, tapi jika anda ingin merubahnya sesuai kebutuhan aplikasi anda, salinlah ke app/app_model.php. Jika anda cermati isi filenya, AppModel ini sendiri juga merupakan turunan dari class Model yang merupakan library Cake standar yang ada di cake/libs/model.php. Jika anda ingin mengetahui lebih banyak tentang function dalam Model, silahkan kunjungi http://api.cakephp.org untuk info lebih lengkap. Yang akan dibahas disini adalah function yang paling sering digunakan.

Pengambilan Data

Berikut adalah beberapa cara mendapatkan data menggunakan model:

  • findAll
  • string $conditions
  • array $fields
  • string $order
  • int $limit
  • int $page
  • int $recursive

Mengembalikan field tertentu sampai dengan batasa $limut sesuai dengan $conditions (jika ada syarat/kondisi tertentu), dimulai dari halaman $page (defaultnya 1). $conditions berbentuk seperti statement SQL, semisal: $conditions=”description=’tutorial’ AND life_cycle>4”.

Ketika opsi $recursive diset lebih besar dari 1, operasi findAll() akan mengembalikan model yang diasosiasikan dengan model yang ditemukan oleh findAll().

  • find
  • string $conditions
  • array $fields
  • string $order
  • int $recursive

Mengembalikan field tertentu (atau seluruhnya jika tidak ditentukan) dari record pertama yang sesuai dengan $conditions.

Ketika opsi $recursive diset ke suatu nilai integer antara 1 dan 3, find() akan mengembalikan model yang diasosiasikan dengan model yang ditemukan oleh find().

  • findAllBy
  • string $value

Method ini bisa dipakai sebagai jalan pintas untuk mencari suatu nilai tertentu dari suatu field dalam tabel. Tinggal lekatkan field yang ingin anda cari, kemudian buatlah menjadi CamelCase (CamelCase adalah Case yang menjadikan setiap huruf awal dari setiap kata dalam suatu frase menjadi huruf capital, contoh: LastName, JobPosition, ProductOwner). Contoh (ketika digunakan dalam suatu Controller) seperti:

$this->Post->findByTitle('My First Blog Post');
$this->Author->findByLastName('Rogers');
$this->Property->findAllByState('AZ');
$this->Specimen->findAllByKingdom('Animalia');

Hasil yang didapatkan dalam bentuk Array seperti find() atau findAll().

  • findNeighbours
  • string $conditions
  • array $field
  • string $value

Method seperti ini mirip seperti jika kita menggunakan aplikasi kamus/dictionary. Biasanya jika kita mencari kata tertentu, maka akan diberikan pula kata yang mendekati bentuk kata tersebut. Hasil yang didapatkan berupa array, yang ditentukan oleh $field dan $value, dan dibatasi oleh $conditions. Namun hanya dapat digunakan pada tipe data ‘numeric’ dan ‘date’. Contoh:

class ImagesController extends AppController
{
function view($id)
{
// Ini cara untuk mengambil data sebuah Image

$this->set('image', $this->Image->find("id = $id");

// Tapi kita juga ingin melihat yang sebelum dan sesudahnya...

$this->set('neighbours', $this->Image->findNeighbours(null, 'id', $id);

}
}

Kode di atas memberi kita suatu array $image[‘Image’], sekaligus dengan $ neighbours['prev']['Image']['id'] dan $neighbours['next']['Image']['id'] pada sisi view.

  • field
  • string $name
  • string $conditions
  • string $order

Mengembalikan sebuah string dari field tunggal dari record pertama sesuai $conditions dan urut berdasar $order.

  • findCount
  • string $conditions

Mengembalikan jumlah record sesuai $conditions.

  • generateList
  • string $conditions
  • string $order
  • int $limit
  • string $keyPath
  • string $valuePath

Method ini merupakan cara cepat untuk mendapatkan sederet daftar pasangan nilai kunci –sangat cocok dipakai untuk membuat tag select HTML dari daftar Model aplikasi anda. Gunakan $conditions, $order, dan $limit sama seperti pada findAll(). $keyPath dan $valuePath merupakan tempat dimana Model dapat menemukan letak key dan value untuk daftar tadi.. Sebagai contoh, jika anda ingin meng-generate suatu daftar/list berdasar aturan pada model Role, dengan key berupa ids integer, maka bisa berbentuk seperti ini:

$this->set(
'Roles',
$this->Role->generateList(null, 'role_name ASC', null, '{n}.Role.id', '{n}.Role.role_name')
);

//Kode di atas akan menghasilkan:
array(
'1' => 'Account Manager',
'2' => 'Account Viewer',
'3' => 'System Manager',
'4' => 'Site Visitor'
);
  • read
  • string $fields
  • string $id

Gunakan read() ini untuk memperoleh field dan nilainya dari record yang telah diload atau record yang ditentukan oleh $id.

Sebagai catatan, read() hanya akan mengambil data dari model asosiasi level pertama tanpa mempedulikan hasil $recursive dalam model. Untuk memperoleh level tambahan, gunakan find() atau findAll().

  • query
  • string $query

  • execute
  • string $query

Perintah SQL biasa dapat dipanggil dengan method query dan execute. Perbedaan antara keduanya adalah query() digunakan untuk membuat custom SQL query (hasilnya dikembalikan). Sedangkan execute() digunakan untuk membuat custom SQL command (tidak membutuhkan nilai dikembalikan). Berikut contoh perintah SQL dengan query():

query("SELECT first_name FROM posters_table
WHERE poster_id = 1");
$firstName = $ret[0]['first_name'];
return $firstName;
}
}
?>

Kondisi Pencarian Kompleks (menggunakan array)

Kebanyakan pemanggilan pencarian dalam model dilakukan dengan melibatkan kondisi tertentu. Pendekatan yang paling sederhana adalah dengan menggunakan klausa WHERE dalam potongan kode SQL. Tetapi jika anda butuh sesuatu yang lebih, anda dapat menggunakan array yang membuat query menjadi lebih mudah untuk dibuat dan dibaca. Syntax ini dapat memisahkan setiap elemen dalam query (field, value, operator, dll) ke bagian yang bisa dimanipulasi. Salah satu contoh sederhana query berbasis array:

$conditions = array("Post.title" => "This is a post");

//Contoh penggunaan dalam suatu model:
$this->Post->find($conditions);

Kode di atas menjelaskan bahwa query akan mencari dalam Model Post yang mempunyai Title=”This is a post”. Untuk diperhatikan, bahwa lebih baik jika anda melakukan query dalam Cake selalu merujuk kepada Model, bukan tabel. Ini untuk menghindari terjadinya collision dalam aplikasi anda. Ok, lalu bagaimana jika kita ingin menggunakan operator? Hal tersebut sama mudahnya. Katakan jika kita ingin menemukan seluruh Post dimana title nya bukan “This is a post”:

array("Post.title" => "<> This is a post")

Cake dapat menangani semua operator pembanding SQL, termasuk ekspresi seperti LIKE, BETWEEN, atau REGEX. Yang jadi catatan adalah jangan lupa memberi spasi antara operator dan ekspresi atau value. Satu-satunya pengualian disini adalah ekspresi IN (…). Baik, sekarang kita ingin mencari Post dengan beberapa value:

array("Post.title" => array("First post", "Second post", "Third post"))

Jika kita ingin membatasi lagi pencarian lagi caranya hanya dengan menambahkan pasangan key/value ke array:

array( "Post.title" => array("First post", "Second post", "Third post"), "Post.created" => "> " . date('Y-m-d', strtotime("-2 weeks")))

Secara default, Cake menggunakan operator Boolean AND untuk operasi join seperti di atas. Jika kita ingin memakai operator Boolean lain, maka bisa dengan cara seperti ini:

array("or" => array ( "Post.title" => array("First post", "Second post", "Third post"), "Post.created" => "> " . date('Y-m-d', strtotime("-2 weeks")) ))

Cake menerima semua operand Boolean, seperti AND, OR, NOT, XOR, dll., dan bisa ditulis huruf kapital maupun tidak.Kondisi ini juga dapat dibuat bersarang. Berikut adalah contoh untuk query dengan tabel Posts dan Authors punya hubungan hasMany/belongTo, yang akan menghasilkan LEFT JOIN pada sisi Post. Kondisinya adalah anda ingin mencari kata ‘magic’ atau yang dibuat dua minggu yang lalu, tapi dibatasi pada Post yang ditulis oleh ‘Bob’:

array ("Author.name" => "Bob", "or" => array ( "Post.title" => "LIKE %magic%", "Post.created" => "> " . date('Y-m-d', strtotime("-2 weeks") ))

Menyimpan Data

Untuk menyimpan data ke dalam model, tentu anda harus mengisinya dengan data yang ingin anda simpan. Data yang disimpan dengan method save() menghasilkan bentuk seperti berikut:

Array( [NamaModel] => Array ( [namafield1] => 'value' [namafield2] => 'value' ))

Cara paling mudah untuk mendapatkan data seperti ini adalah dengan menggunakan helper HTML (akan dibahas setelah pembahasan MVC), karena akan membuat elemen-elemen form yang namanya sesuai dengan aturan di Cake. Anda tidak harus menggunakannya: pada pokoknya hanya pastikan nama elemen formnya berbentuk seperti data[NamaModel][namafield]. Namun bagaimanapun juga $html->input('Model/fieldname') adalah cara termudah.

Data yang dikirim dari form secara otomatis akan terformat seperti di atas dan diletakkan dalam $this->data didalam Controller. Berikut contoh fungsi edit pada Controller Property:

function edit($id)
{

//Catatan: Model Property secara otomatis diletakkan oleh Cake ke $this->Property.

// Mengecek apakah form diisi data...
if (empty($this->data))
{
$this->Property->id = $id;
$this->data = $this->Property->read();//membaca field pada form
}
else
{
// Perhatikan cara menyimpan data berikut. Cake juga secara otomatis dapat melakukan validasi checking
if ($this->Property->save($this->data['Property']))
{
//Pesan Flash yang ditampilkan dan redirect.
$this->flash('Your information has been saved.',
'/properties/view/'.$this->data['Property']['id'], 2);
}
//jika ada field yang invalid atau gagal menyimpan, Cake juga akan merender halaman error.
}
}

Perhatikan bagaimana operasi menyimpan ini terletak pada suatu kondisional validasi sesuai aturan yang telah dibuat. Lebih lanjut tentang Validasi Data akan dibahas nanti. Sekarang jika anda tidak ingin save() memvalidasi data anda gunakan save($data, false).

Beberapa fungsi lain yang berguna:

  • del
    • string $id
    • boolean $cascade

Menghapus model sesuai $id.

Jika Model mempunyai ke Model-Model lain, dan ‘dependent key’ telah terdeklarasikan dalam array asosiasi, maka method del() ini akan menghapus Model-Model lain tersebut jika $cascade diset ‘true’.

del() akan mengembalikan nilai true jika sukses.

· saveField

o string $name

o string $value

Digunakan untuk menyimpan nilai field tunggal.

· getLastInsertId

Mengembalikan nilai ID dari record yang terakhir dibuat.

Callback Model

Dalam Model Cake, dikenal juga Callback yang memperbolehkan anda untuk melakukan sesuatu sebelum atau setelah suatu operasi. Berikut method Callback dalam Cake:.

· beforeFind

o string $conditions

Set ke ‘return true’ ketika anda ingin method find dieksekusi, dan ‘false’ jika ingin menghentikan perintah find.

· afterFind

o array $results

Gunakan method callback yang satu ini jika ingin memodifikasi hasil operasi find() atau jika ingin melakukan operasi lain terhadap hasil find(). Parameter untuk method ini tentu saja hasil operasi find, dan keluarannya berupa hasil yang sudah diubah.

  • beforeValidate

Gunakan callback ini untuk memodifikasi data Model sebelum divalidasi. Bisa juga digunakan untuk aturan validasi yang lebih kompleks, menggunakan Model::invalidate().Dalam konteks ini, data Model dapat diakses melalui $this->data. Method ini juga harus diset ke true, dan sebaliknya false jika ingin menghentikan save()..

  • beforeSave

Callback ini juga diset ke true jika operasi save() ingin berlanjut, dan false jika ingin digagalkan. Contoh penggunaan beforeSave dalam penanganan format waktu di suatu database:

// Berikut adalah field Date/time yang dibuat helper HTML:

// Kode ini akan dilihat di View



$html->dayOptionTag('Event/start');

$html->monthOptionTag('Event/start');

$html->yearOptionTag('Event/start');

$html->hourOptionTag('Event/start');

$html->minuteOptionTag('Event/start');



/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/



// Kode berikut akan ada di Model Event, callback beforeSave digunakan untuk merubah format waktu sebelum disimpan ke database:



function beforeSave()

{

$this->data['Event']['start'] = $this->_getDate('Event', 'start');



return true;

}



function _getDate($model, $field)

{

return date('Y-m-d H:i:s', mktime(

intval($this->data[$model][$field . '_hour']),

intval($this->data[$model][$field . '_min']),

null,

intval($this->data[$model][$field . '_month']),

intval($this->data[$model][$field . '_day']),

intval($this->data[$model][$field . '_year'])));

}
  • afterSave
  • beforeDelete

Set ke ‘return true’ ketika anda ingin penghapusan dieksekusi, dan ‘false’ jika ingin menghentikan perintah penghapusan.

  • afterDelete

Section 3

Variabel Model

Ketika anda bekerja dengan Model, ada sejumlah variabel yang bisa anda manfaatkan untuk mendapat fungsi khusus dari Cake.

$primaryKey

Jika suatu Model merupakan suatu tabel dalam database, dan primary key tabel tersebut tidak bernama ‘id’, anda bisa guakan variabel ini untuk memberitahukan Cake nama primary key-nya.

$recursive

Variabel ini mengatur kedalaman tingkat pengambilan Model yang terasosiasi ketika menggunakan operasi find() dan findAll().

Contoh : seandainya anda mempunyai Groups yang mempunyai banyak Users yang masing-masing mempunyai Articles.

Opsi dalam Model::recursive

$recursive = 0

Cake mengambil data Group

$recursive = 1

Cake mengambil sebuah Group dan User yang terasosiasi

$recursive = 2

Cake mengambil sebuah Group, User yang terasosiasi, dan Articles yang dimiliki User tersebut

$transactional

Memberitahukan Cake apakah Model dapat melakukan transaksi atau tidak (seperti begin/commit/rollback). Menggunakan nilai Boolean. Hanya dapat untuk database tertentu.

$useTable

Jika tabel dalam database anda tidak berbentuk plural/mendapat akhiran ‘s’, dan anda tidak ingin menggantinya, set lah variabel ini ke nama tabel yang ingin anda gunakan.

$validate

Merupakan array yang digunakan untuk memvalidasi data ke model (akan ada pembahasan lebih lanjut di Chapter lain).

$useDbConfig

Masih ingat setting database pada Chapter sebelumnya di /app/config/database.php? Gunakan variabel ini untuk berpindah antara nama koneksi database yang ada di file tersebut. Nilai defaultnya adalah ‘default’.

Konsep Dasar CakePHP (bag III)

Sebelum memulai konfigurasi di Cake, saya minta anda untuk membuat suatu database bernama ‘blogcake’ lebih dulu. Silahkan buka phpMyAdmin dari web browser anda, cari kolom Create new database, ketik blogcake, kemudian klik tombol create. Jika benar, anda akan lanjut ke halaman baru yang menyatakan anda telah sukses membuat database baru dan anda sudah langsung memakai database tersebut. Sekarang klik tab SQL yang ada di atas frame sebelah kanan. Copy query berikut dan paste ke text area di halaman tersebut.

CREATE TABLE posts (

id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

title VARCHAR(50),

body TEXT,

created DATETIME DEFAULT NULL,

modified DATETIME DEFAULT NULL

);

/* Kemudian masukkan beberapa Post untuk testing*/

INSERT INTO posts (title,body,created)

VALUES ('The title', 'This is the post body.', NOW());

INSERT INTO posts (title,body,created)

VALUES ('A title once again', 'And the post body follows.', NOW());

INSERT INTO posts (title,body,created)

VALUES ('Title strikes back', 'This is really exciting! Not.', NOW());


Klik go. Selanjutnya baru kita memulai tahap konfigurasinya.

Section 1

Konfigurasi Database

Konfigurasi database pada Cake terdapat pada file app/config/database.php. Namun pada instalasi awal Cake tidak terdapat file tersebut, jadi anda harus mengcopy dari file database.php.default. Ubah namanya menjadi database.php saja.Buka file tersebut dengan web editor anda (Dreamweaver, Notepad++, EditPlus, atau yang lain) lihat pada bagian:

var $default = array('driver' => 'mysql',

'connect' => 'mysql_connect',

'host' => 'localhost',

'login' => 'user',

'password' => 'password',

'database' => 'project_name',

'prefix' => '');

Ubah bagian login dan password sesuai setting MySQL anda. Kemudian ‘project_name’ pada database menjadi blogcake seperti yang sudah kita buat tadi.

Catatan untuk variabel ’prefix’ : jika anda memasukkan string ke dalamnya, maka jika anda melakukan query SQL untuk tabel akan mengarah ke prefix_namatabel. Contoh jika anda punya tabel posts seperti di atas, dan ’prefix’=>’blog_’, maka query akan mengarah ke ‘blog_posts’. Sekali anda mendefinisikan prefix, keseluruhan tabel dalam database harus mendapat imbuhan prefix tersebut. Dan untuk tabel HABTM join, anda cukup menambah prefix sekali: blog_categories_posts, bukan blog_categories_blog_posts.

CakePHP mendukung beberapa driver dabatabase berikut:

1. mysql

2. postgres

3. sqlite

4. pear-drivername (contoh pear-mysql)

5. adodb-drivername

Kata kunci 'connect' pada koneksi $default mempersilahkan anda untuk menentukan apakah koneksi akan persistent atau tidak. (Baca komentar pada file database.php untuk menentukan tipe koneksi lebih lanjut). Sementara pada tutorial ini, kita isi dengan ‘mysql_connect’ saja.

Selain itu, tabel dalam database anda juga harus mengikuti konvensi yang digunakan Cake. Memang kelihatannya cukup merepotkan pada mulanya, namun anda cukup percaya saja, kelak anda akan merasakan manfaatnya ketika memulai memaintenance aplikasi web anda, dan anda akan ‘tersihir’ bagaimana Cake dapat menghasilkan aplikasi berskala besar dengan cepatnya jika anda benar-benar mengikuti aturan Cake.Selain itu, anda bisa mendaftarkan aplikasi anda ke komunitas open source Cake. Ok, inilah aturan untuk tabel:

1. Nama tabel biasanya berupa kata jamak/plural dalam bahasa Inggris, seperti “users, posts, polls”. Sebenarnya dalam bahasa Indonesia pun tidak masalah, cukup dengan menambahkan akhiran –s dibelakang nama tabel, contoh: “artikels, divisis, kategories”. Namun untuk Model (ingat konsep MVC-nya) untuk tabel yang bersangkutan nama modelnya berupa kata tunggal.

2. Dalam tabel harus ada primary key bernama ‘id’.

3. Jika ada relasi, gunakan foreign key seperti ‘article_id’. Nama tabel berupa kata tunggal/singular, diikuti underscore, kemudian diakhiri ‘id’.

4. Jika dalam tabel terdapat kolom ‘created’ dan/atau ‘modified’, Cake secara otomatis akan mengisinya sesuai dengan keadaan.

Selain $default dalam database.php, anda juga akan melihat seting $test connection di bawahnya. Silahkan isi sesuka anda dengan aturan sama seperti di atas, kemudian anda bisa menggunakannya dengan cara seperti:

var $useDbConfig = 'test';

Sampai disini, kita akan kembali mengetes instalasi Cake kita. Jika benar, anda akan mendapatkan hasil seperti ini:

Section 2

Konfigurasi Umum

Konfigurasi umum/global Cake dapat ditemukan pada file app/config/core.php. Sebenarnya tidak ada yang anda perlu ubah untuk tutorial ini, namun saya akan tetap memberitahu anda beberapa point penting di file ini.

DEBUG: defaultnya bernilai ‘1’, akan menampilkan pesan kesalahan pada kode yang anda buat pada aplikasi anda. Jika anda mengeset ke ‘2’, maka hasil query SQL akan ditampilkan di sisi bawah layar halaman. Selain 0, Cake akan merender error page sesuai kesalahan code pada aplikasi anda, seperti “Missing Controller”, “Missing Action”, dll.

CAKE_SESSION_COOKIE: ubah nilainya ke nama cookie yang anda gunakan untuk user session di aplikasi anda.

CAKE_SECURITY: ubah nilai ini untuk menentukan pengecekan level session. Cake akan menentukan akhir session, menggenerate session ids baru, dan menghapus session lama berdasar nilai yang anda masukkan. Nilai yang bisa anda tulis adalah:

1. high: session akan berakhir setelah 10 menit dari tidak adanya aktifitas apapun, session ids diregenerasi pada setiap request.

2. medium: session akan berakhir setelah 20 menit dari tidak adanya aktifitas apapun.

3. low: session akan berakhir setelah 30 menit dari tidak adanya aktifitas apapun.

CAKE_SESSION_SAVE: menentukan bagaimana data session akan disimpan. Silahkan memasukkan salah satu nilai berikut (urut dari yang paling low-security sampai high-security):

1. cake: data session akan disimpan dalam tmp/ di instalasi Cake anda.

2. php: data session akan disimpan sesuai definisi php.ini.

3. database: data session akan disimpan ke suatu tabel sesuai di variabel $default, biasanya bernama cake_sessions. Di artikel lain saya akan mencontohkan penggunaan database untuk penanganan sessions. Namun sementara ini kita setting ke ‘php’ dulu.

Section 3

Konfigurasi Routing

Routing merupakan bagian dari mod_rewrite PHP yang dapat ‘memetakan’ URL ke controller/action/params. Dengan routing URL bisa lebih cantik dan lebih dapat dikonfigurasi. Routing dapat ditentukan lewat file app/config/routes.php. Pattern/pola yang digunakan untuk routing seperti berikut:

$Route->connect ('URL', array('controller'=>'controllername', 'action'=>'actionname', 'firstparam'))

Dimana:

1. URL adalah regular expression (regex) dari URL Cake yang akan anda petakan,

2. controllername adalah nama controller yang anda akan sertakan

3. actionname adalah nama action dari controller

4. firstparam adalah nilai parameter pertama dari action yang anda tentukan

Parameter lain yang menyertai firstparam akan dipassing sebagai parameter ke action controller.

Dalam tutorial ini tidak ada yang perlu diubah dari file konfigurasi routing tersebut.

Section 4

Konfigurasi Routing Lanjut: Admin dan Webservices

Masih dalam file yang sama (/app/config.core.php) anda bisa mengatur penanganan URL untuk admin dan webservices. Hal pertama yang kita bahas adalah routing URL admin. Tentu dalam aplikasi yang kita buat, ada hak istimewa sebagai admin yang kita berikan kepada user tertentu (Lebih lanjut tentang pemberian hak akses akan kita pelajari di fitur ACL=Access Control List). Biasanya saya lebih menyukai URL berbentuk /admin/posts/add atau /admin/posts/edit daripada /posts/adminAdd atau /posts/adminEdit.

Untuk mengaktifkan fungsi ini di Cake, yang pertama kali dilakukan adalah menghilangkan komentar berupa tanda double slash (//) dari CAKE_ADMIN pada file /app/config/core.php. Nilai default dari CAKE_ADMIN ini adalah ‘admin’, tapi anda juga bisa mengubahnya ke nilai lain yang anda suka, seperti ‘superuser’, ‘su’, ‘atur’, dll. Ingatlah nilai yang anda masukkan ini, karena akan digunakan untuk controller (akan dibahas nanti). Nantinya, action dari admin ini akan bernama namaadmin_namaaction(). Berikut beberapa contoh URL, CAKE_ADMIN, dan action di controller:

/admin/products/add CAKE_ADMIN = 'admin'

Nama action di ProductsController = 'admin_add()'


/superuser/news/post CAKE_ADMIN = 'superuser'

Nama action di NewsController = 'superuser_post()'


/su/posts/delete CAKE_ADMIN = 'su'

Nama action di PostsController = 'su_delete()'


Setelah diset variabel CAKE_ADMIN, maka anda dapat dengan mudah menggunakan routing admin ini dengan menggunakan:

$this->params[CAKE_ADMIN];

atau

$this->params['admin'];

(dengan anggapan bahwa ‘admin adalah variabel dari CAKE_ADMIN).

Sesuai dengan catatan dari manual yang ada pada situs CakePHP.org bahwa dengan mengaktifkan routing admin ini tidak berarti anda menggunakan metode otentifikasi ataupun security tertentu. Anda harus mengesetnya sendiri, yang akan dijelaskan di chapter lain. (Sekali lagi) Sabar…

Dengan cara yang sama, anda dapat mengaktifkan routing untuk fitur webservices sama mudahnya. Pertama, set WEBSERVICES di file yang sama ke ‘on’, kemudian anda tinggal menambahkan beberapa logic di Controller anda. Jadi, dengan mengaktifkan WEBSERVICES ini anda mengaktifkan suatu hal yang hampir sama dengan routing admin, kecuali beberapa prefix untuk routing ini sudah tersedia, seperti:

1. rss

2. xml

3. rest

4. soap

5. xmlrpc

Nantinya anda akan punya alternative View yang bisa diakses pada /rss/namaController/namaAction atau /soap/namaController/namaAction. Anda cukup membuat satu action untuk dua view: satu untuk halaman HTML biasa, dan yang lain untuk pemakai webservice.