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.

Konsep Dasar CakePHP (bag II)

Untuk melakukan instalasi CakePHP, dibutuhkan sebuah server yang memuat seluruh library dan program yang dibutuhkan untuk menjalankan CakePHP. Syarat yang harus dipenuhi dalam server itu adalah:

  1. Sebuah server HTTP (seperti Apache) dengan session enabled dan mod_rewrite(mod_rewrite ini lebih disukai dalam keadaan enabled)
  2. PHP 4.3.2 atau di atasnya (5.x)
  3. Database engine(MySQL, PostgreSQL, dan yang mendukung ADODB)

Setelah anda mendapatkan CakePHP dari chapter1 sebelumnya, sekarang letakkan file .ZIP atau bentuk file yang terkompres tersebut ke DocumentRoot/webroot anda. Kalau anda mengikuti memakai AppServ yang terinstal di C:\, maka dalam file httpd.conf apache biasanya sudah tersetting ke C:/appserv/www. Selanjutnya ada dua cara instalasi CakePHP: menggunakan development setup, yang mempersilahkan untuk melihat sekaligus beberapa aplikasi CakePHP dalam satu domain, atau dengan production setup, yang memperbolehkan satu aplikasi CakePHP dalam satu domain.

Sebelum mensetup Cake, pastikan mod_rewrite dalam httpd.conf Apache diperbolehkan. Caranya cari dalam folder instalasi Apache file conf/httpd.conf. Edit dengan notepad, hilangkan tanda pagar (#) di awal baris berikut:

 LoadModule rewrite_module modules/mod_rewrite.so

Pastikan juga agar Apache mengijinkan akses .htaccess override. Di file yang sama, cari kata-kata AllowOverride pada atau , set ke All, sehingga menjadi AllowOverride All.

Jika anda mengikuti langkah sebelumnya, untuk menginstal development setup anda tinggal mengekstrak ke folder /appserv/www. Sehingga nampak seperti berikut:


/appserv

/www

/cake

/app

/cake

/vendors

.htaccess

index.php

Ketikkan localhost/cake pada browser anda, maka anda akan mendapatkan tampilan seperti berikut:


(Perhatikan Your database configuration file is not present ! Pesan tersebut muncul karena memang sampai sejauh ini kita belum mengonfigurasi database apa yang aka digunakan. Harap sabar…)

Nantinya, jika mod_rewrite dalam keadaan enabled, maka URL anda akan berbentuk seperti ini:

www.example.com/cake/controllerName/actionName

/param1/param2
Contoh jika kita membuat Controller bernama ‘posts’, action-nya ‘edit’, dan parameter-nya adalah ‘1’ di localhost/cake, maka bentuk URL-nya: localhost/cake/posts/edit/1

(Sebenarnya ada beberapa cara lain untuk men-setup Cake ke dalam Web Server. Tapi untuk sementara kita pakai cara yang paling sering dan paling mudah digunakan dulu)

Konsep Dasar CakePHP (bag I)

Sebelum memulai instalasi dan praktek lainnya, ada baiknya kita mengenal konsep yang diterapkan dalam CakePHP. CakePHP menggunakan apa yang disebut dengan pola Model-View-Controller (MVC). MVC adalah pola desain software yang membantu secara logis memisahkan kode program anda, membuatnya lebih reusable, maintainable, dan lebih baik secara keseluruhan.

Dalam istilah Cake, Model mewakili bagian table/record database, dan hubungannya dengan table/record yang lain. Model juga dapat berisi aturan validasi data, yang biasa diterapkan ketika data model di-insert atau update.

View mewakili file tampilan Cake, yang merupakan HTML biasa dengan tambahan kode PHP.

Sedangkan Controller dalam Cake menangani permintaan dari server. Controller menangani user input (URL dan data POST), menerapkan business ligic, memakai Model untuk membaca dan menulis data dari dan ke database dan sumber lainnya, serta mengirimkan data keluaran ke file View yang sesuai.

Untuk memudahkan pengorganisasian aplikasi, Cake menggunakan MVC tidak hanya untuk mengatur bagaimawa objek berinteraksi dalam aplikasi, tapi juga bagaimana file-file disimpan, yang akan dijelaskan nanti.

Ok, sekarang kita beralih melihat susunan file/folder dalam CakePHP. Jika anda meng-unpack file yang sudah didownload dari chapter 1 sebelumnya, anda akan melihat bahwa ada beberapa folder dalam Cake. Namun ada tiga folder utama: app, cake, dan vendors. Secara lengkap berikut susunan folder dalam CakePHP:

/app
    /config          - Berisi file-file konfigurasi database, ACL, dll 
 
    /controllers     - Controllers aplikasi anda 
        /components  - Components aplikasi anda
 
    /index.php       - mempersilahkan anda untuk mengembangkan cake dengan /app
sebagai DocumentRoot
 
    /models          - Models aplikasi
 
    /plugins         - Plugins aplikasi
 
    /tmp             - digunakan untuk caches dan logs
(set folder ini menjadi writable)
 
    /vendors         - Berisi third-party libaries untuk aplikasi
 
    /views           - Views aplikasi
        /elements    - Elements, bagian dari tampilan
        /errors      - Custom error pages
        /helpers     - Helpers
        /layouts     - Application layout files
        /pages       - Static views 
 
    /webroot         - DocumentRoot untuk aplikasi
        /css
        /files
        /img
        /js
 
/cake                - Library inti Cake. Jangan edit file apapun dalam folder ini.
 
index.php           
 
/vendors             - Untuk server-wide third-party libraries.
 
VERSION.txt          - Versi Cake yang anda gunakan

Bake dan Scaffolding Pada CakePhp

Dalam website resmi CakePhp(http://www.cakephp.org) Cakephp disebut sebagai Rapid Application Framework Salah satu alasannya adalah karena Cake memiliki fitur Scaffold dan Bake.

Bake
adalah fitur CakePhp yang mampu menggenerate model, view, dan controller (MVC) secara otomatis sesuai dengan database yang ada pada konfigurasi. Bake cocok digunakan sebagai template, karena Bake akan otomatis menghasilkan kode kode umum yang sering digunakan (kode kode CRUD) yang bisa diubah ataupun ditambahkan sesuai kebutuhan.

Untuk menggunakan fitur ini cukup mudah masuklah pada direktori cake/scripts pada instalasi CakePhp lalu ketikkan ketikkan “php bake.php”. Misal akan dibuat aplikasi yang menggunakan tabel Log.

Contoh penggunaan Bake pada pembuatan model

[M]odel[C]ontroller[V]iewPlease select a class to Bake: (M/V/C)>m—————————————————————

Model Bake:
—————————————————————
Possible models based on your current database:

1. Log

Enter a number from the list above, or type in the name of another model.

> 1

Would you like to supply validation criteria for the fields in your model? (y/n)[y]

> n

Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)? (y/n)[y]

> n

—————————————————————
The following model will be created: —————————————————————

Model Name: Log

DBConnection: default

Model Table: logs

Validation: Array

(

)
—————————————————————
Look okay? (y/n)

[y] > y

Creating file /var/www/html/cake//app/models/log.php

File /app/models/log.php exists, overwrite? (y/n/q):y

Do you want to bake unit test files anyway? (y/n)[y] > n

Hasil eksekusi bake di atas akan

menghasilkan file app/model/log.php

<?
class Log extends AppModel{
}
?>

Contoh penggunaan bake pada pembuatan controller
Please select a class to Bake: (M/V/C)> c---------------------------------------------------------------

Controller Bake:
---------------------------------------------------------------
Controller name? Remember that Cake controller names are plural.

> logs

Would you like bake to build your controller interactively?

Warning: Choosing no will overwrite Logs controller if it exist. (y/n)[y]

> y

Would you like this controller to use other models besides ‘Log’? (y/n)[n]

> n

Would you like this controller to use other helpers besides HtmlHelper? (y/n)[n]

> n

Would you like this controller to use any components? (y/n)[n]

> n

Would you like to include some basic class methods (index(), add(), view(), edit())? (y/n)[n]

> y

—————————————————————

The following controller will be created:

—————————————————————

Controller Name: logs

—————————————————————

Look okay? (y/n)[y]

> y

Creating file /var/www/html/cake//app/controllers/logs_controller.php

File /app/controllers/logs_controller.php exists, overwrite? (y/n/q):y

Wrote /app/controllers/logs_controller.php

Cake test suite not installed.

Do you want to bake unit test files anyway? (y/n)[y]

> n

Hasil pengeksekusian di atas akan menghasilkan file

app/controllers/Logs_Controller.php


Penggunaan bake pada pembuatan view

Please select a class to Bake: (M/V/C)---------------------------------------------------------------

View Bake:

---------------------------------------------------------------
Controller Name? (plural)

> logsWould you like bake to build your views interactively

?Warning: Choosing no will overwrite views if it exist.

(y/n)[y]

> y

Would you like to create some scaffolded views (index, add, view, edit) for this controller?

NOTE: Before doing so, you’ll need to create your controller and model classes

(including associated models). (y/n)[n]

> y

Creating file /var/www/html/cake//app/views/logs/index.thtml

Wrote /app/views/logs/index.thtml

Creating file /var/www/html/cake//app/views/logs/view.thtml

Wrote /app/views/logs/view.thtml

Creating file /var/www/html/cake//app/views/logs/add.thtml

Wrote /app/views/logs/add.thtml

Creatingfile /var/www/html/cake//app/views/logs/edit.thtml

Wrote /app/views/logs/edit.thtml—————————————————————Note:- If you’re using a non-domain install, change URL pathsfrom /controller/action to /cake_install/controller/action—————————————————————View Scaffolding Complete.

Pengeksekusian di atas akan menghasilkan file file :


app/views/logs/add.thtml
app/views/logs/index.thtml
app/views/logs/edit.thtml
app/views/logs/view.thtml


Scaffolding memiliki fungsi yang hampir sama denganBake, hanya saja dengan scaffolding tidak ada kode yang mesti kita buat hanya membuat kelas model dan controller. Lalu mendeklarasikan variabel scaffold pada controller.
Contoh model yang menggunakan fitur scaffolding
<?
class Log extends AppModel{
}
?>

Contoh controller yang menggunakan fitur scaffolding

<?php
class LogsController extends AppController
{
var $scaffold;
}
?>


Kedua kelas di atas akan otomatis menghasilkan aplikasi web sederhana dengan kemampuan CRUD (Create Update Delete).

Kesimpulan:

CakePhp adalah sebuah Rapid ApplicationFramework yang bisa mempercepat
pembuatan sebuah aplikasi web. Salah satu fitur yang dimiliki CakePhp
adalah Bake dan Scaffolding. Dengan Bake dapat dibuat template untuk
masing masing model, view, dan controller sehingga developer tidak
perlu membuat kode dari awal. Sedang Scaffolding sangat berguna dalam membuat aplikasi web sederhana dengan fitur CRUD.

Introduction CakePhp

CakePhp (http://www.cakephp.org) dibuat oleh ichal Tatarynowicz pada tahun 2005. Proyek ini terinspirasi oleh esuksesan RoR(Ruby On Rails) yang membuat bahasa Ruby terkenal.
CakePhp adalah sebuah framework (kerangka
kerja) yang bisa membuat proses pengembangan aplikasi web menjadi lebih
cepat dan efiisen. CakePhp menyediakan pustaka (library), class, dan
infrastruktur bagi programmer dalam membuat aplikasi web.

Dalam proses pengembangan plikasi web CakePhp menggunakan pola MVC ( Model View Controller). imana pada pola ini kode pengaksesan database dan kode untuk
menampilkan data dipisahkan. Pola ini memiliki banyak keuntungan salah
satunya adalah proses pengembangan logika bisnis( bussiness logic),
pembuatan basis data, dan desain antar muka dapat dilakukan oleh orang
yang berbeda dan secara mandiri, sehingga proses pembuatan aplikasi
bisa menjadi lebih cepat

Untuk menginstall CakePhp maka terlebih dahulu harus disediakan:

  1. HTTP Server( Seperti Apache, dengan session dan mod_rewrite dienabled)
  2. PHP 4.3.2 atau yang lebih baru, CakePhp dapat bekerja dengan php versi 4 dan 5 dengan baik.
  3. Database Server( Saat ini CakePhp baru mendukung MySql, Postgresql, dan wrapper untuk AdoDB)

Versi terbaru CakePhp dapat didownload di
http://cakeforge.org/projects/cakephp/. Proses Penginstallan CakePhp
sangat mudah cukup dengan diekstrak pada direktori root HTTP server.

/wwwroot
/cake
/app
/cake
/vendors
.htaccess
index.php

Setelah itu ada beberapa hal yang mesti dicek.

  • Pastikan file .htaccess bisa ditulisi. Untuk itu padasettingan dokumen root web server anda pastikan bagian “AllowOverride”adalah All.
  • Pastikan modul mod_rewrite telah terinstall dan dimuat oleh web server anda.

Untuk memastikan cakephp telah terinstall dengan benar maka bukalah alamat http://localhost/cake

pada browser, jika cakephp diekstrak pada folder cake pada dokumen root tadi.

Selanjutnya jika Cakephp telah terinstall, maka proses selanjutnya

adalah konfigurasi database. Pada CakePhp konfigurasi database disimpan

di app/config/database.php. CakePhp yang baru terinstall tidak memiliki

file ini, untuk itu kopi file app/config/database.php.default menjadi

app/config/database.php lalu ubah sesuai dengan database yang akan

digunakan.

var $default = array('driver' => 'mysql',                     'connect' =>'mysql_connect',                     'host'    => 'localhost',

'login' => 'user',

'password' => 'password',

'database' => 'project_name',

'prefix' => '');

Nah sekarang lanjut ke tahap pemrogramannya. Dalam membuat aplikasi dengan CakePhp ada tiga hal yang mesti dibuat yaitu

  1. Model,model ini adalah akses poin ke database jadi semua kode kode yangbersifat pengaksesan terhadap database ada di model. Kode model disimpan dalam folder app/models
  2. Controller, berisi logika bisnis pada aplikasi, memrosesdata data yang diambil dari database, dan mengatur data data apa yangmesti ditampilkan. Kode controller disimpan dalam folder app/controllers
  3. View, berisi kode kode yang akan mengatur bagaimana data datadari controller tadi akan ditampilkan. Kode view disimpan dalam folderapp/views.
Tambahan (instalasi) :

  1. Edit http.conf dengan mengaktifkan mod_rewrite.so
  2. Kemudian (masih di http.conf) pastikan direktori webroot (misal htdocs) telah memiliki setting seperti berikut :
    Options Indexes Multiviews,
    AllowOverride All,
    Order allow,
    deny Allow from all
    Untuk lebih jelasnya jangan lupa juga sedikit membaca komentar yang ada. Kemudian coba refresh browser anda, jika tampilan CakePHP menjadi lebih berwarna, maka anda telah berhasil.
  3. Sekarang tinggal menyelesaikan settingan, sesuai perintah yang tampil di browser anda. Untuk setting database cobalah edit file app/config/database.php.default dengan mengikuti petunjuk yang ada. Setelah itu save dengan nama database.php.
  4. Anda juga bisa mengubah nilai security.salt yang ada pada app/config/core.php, bebas dengan nilai apapun. Tapi tahapan setting ini tidak saya temukan pada versi CakePHP sebelumnya.
  5. Finish. CakePHP anda sudah bisa digunakan, walaupun mungkin masih ada settingan optional yang harus anda lakukan.


CakePHP dan KCAPTCHA

CakePHP merupakan sebuah framework multifungsi yang, tentu saja, mendukung penggunaan uji CAPTCHA. Ada sebuah aplikasi opensource untuk menampilkan image CAPTCHA yang dikenal dengan KCAPTCHA. Untuk mendapatkannya, silahkan Anda terlebih dahulu mendownloadnya disini.

Sudah ? Oke, kita akan memulai proyek penghadangan spambot ini.

PERTAMA :
Ekstrak aplikasi KCAPTCHA Anda dan letakkan di folder vendors dengan path “instalasiCake/vendors/kcaptcha”. Buka file kcaptcha_config.php yang ada di dalam folder kcaptcha tersebut. Di sana ada beberapa konfigurasi yang bisa Anda kustomasi, semisal menghilangkan tampilan “credits” dengan mengeset line :

$show_credits = true ;

menjadi

$show_credits = false;

tentu jika Anda ingin menghargai pencipta aplikasi ini, silahkan tetap menampilkannya. Anda bisa membaca keterangan yang ada dalam file tersebut sebelum melakukan pengaturan.

KEDUA :
Buat sebuah file komponen dengan nama captcha.php dengan script sebagai berikut :

<?php

class CaptchaComponent extends Object
{
function startup(&$controller)
{
$this->controller = $controller;
}
function render()
{
vendor(’kcaptcha/kcaptcha’);
$kcaptcha = new KCAPTCHA();
$this->controller->Session->write(’captcha’, $kaptcha->getKeyString());
}
}
?>

Simpan file tersebut pada path “instalasiCake/app/controllers/components/captcha.php”

KETIGA :
Saatnya membuat script validasi pada Controller Anda. Anggap Controller Login adalah Controller yang akan menghandle halaman login Anda.

<?php

class UsersController extends AppController
{

/*tambahkan pendeklarasian komponen Captcha*/
var $components = array(’Captcha’);

/* menambahkan script validasi */
if(isset($_SESSION[’captcha’]) && $_SESSION[’captcha’] == $_POST[’keystring’]) {

//masukkan script Anda yang lainnya di sini

}
else {
//tampilkan pesan kesalahan
}

/*fungsi captcha untuk rendering image
function captcha()
{
$this->Captcha->render();
}

}
?>

Jangan lupa untuk menyimpan Controller Login yang telah Anda modifikasi sedemikian rupa seperti di atas.

KEEMPAT :

Kini kita akan membuat tampilan image CAPTCHA. Pada bagian View dari aplikasi CakePHP Anda, tambahkan script di bawah ini untuk menampilkan image CAPTCHA :

<img src="<?php echo $html->url('/logins/captcha'); ?>" />

Untuk memasukkan input teks dari image CAPTCHA yang terbaca oleh pengunjung situs Anda, tambahkan script :

<input type=”text” name=”keystring”>

KELIMA :

Cek ! Pastikan aplikasi Anda berjalan dengan baik. Apabila aplikasi Anda tidak menampilkan image, pastikan PHP Anda mendukung dan terinstall GDLibrary. Silahkan cek dengan membuat file info.php yang berisi script :

<?
phpinfo();
?>

Selamat berjuang melawan spam-spam nakal.



Blog Making Tutorial From IBM Sites

Barusan kemarin ngumpulin paket tutorial yang dibuat oleh website resmi IBM, tentang bagaimana membuat blog dan atribut-atributnya dengan menggunakan CakePHP. Alhamdulillah, udah terkumpul seri 1 sampai dengan 5, dalam bentuk file PDF.

So, buat temen-temen, silahkan deh, sedot pdf dan sourcenya dari website info-ugm, di url ini :

Tutorial Blog dari IBM
(semoga pas lagi nggak down)

Tutorial Scaffolding - Membuat List Pemain American Football

Original Tutorial By Jason Gilmore (developer.com)

Tutorial kali ini akan memberikan sebuah contoh sederhana menggunakan fitur scaffolding yang ada pada framework CakePHP. Scaffolding adalah sebuah variabel tambahan yang memudahkan developer untuk melihat prototipe aplikasi CRUD (Create, Read, Update, Delete) yang akan ia buat, sebelum ia menuliskan seluruh script yang dibutuhkan pada controller aplikasi.
Sebagai contoh, kita akan membuat sebuah aplikasi untuk melakukan manajemen pemain sebuah tim American Football. Aplikasi yang akan kita buat memerlukan setidaknya link untuk melakukan creating (pembuatan item pemain), editing (edit item), viewing (melihat item pemain) dan deleting (menghapus item pemain). Selain itu, perlu pula data untuk mengetahui dengan tim mana pemain tersebut bergabung.
Kita akan menggunakan framework CakePHP untuk membuat prototipe aplikasi CRUD. Kita asumsikan, Anda sudah terbiasa dan familiar dengan konsep arsitektur MVC yang menjadi dasar kerja CakePHP. Selain itu, kita asumsikan Anda sukses melakukan instalasi framework CakePHP pada webserver Anda.

Membuat Tabel Database

Untuk tutorial kali ini, kita akan membuat dua buah tabel database yang mewakili kebutuhan dasar dari aplikasi kita. Tabel yang akan kita buat adalah players dan teams. Cukup pastekan script SQL ini di phpMyadmin Anda, setelah Anda mendefinisikan database aplikasi Anda:

CREATE TABLE players (
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(50) NOT NULL,
position VARCHAR(25) NOT NULL,
team_id SMALLINT(6)
)

CREATE TABLE teams (
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
)

Cermati item field team_id yang terdapat pada tabel players . Ini adalah foreign key yang dipetakan ke primary key tabel teams. Field tersebut diberi nama demikian karena CakePHP mampu secara otomatis mengidentifikasinya sebagai foreign key dan memanfaatkannya untuk menampilkan berbagai macam hal yang menarik seperti men-generate listboxes saat menambahkan dan mengedit pemain baru.

Menggunakan Scaffolding
CakePHP mempunyai sebuah fitur istimewa yang dikenal dengan nama scaffolding. Sesuai dengan namanya, scaffolding berfungsi untuk mem-parsing skema tabel dan membuat form-form yang sesuai dengan tipe datanya. Dengan demikian, pengguna CakePHP akan melihat contoh tampilan aplikasi sebelum ia benar-benar menuliskan secara lengkap source code pada controller-nya.
Ada beberapa peraturan yang harus ditaati supaya fitur scaffolding ini berjalan dengan baik :

• Apabila Anda ingin memetakan sebuah foreign key ke sebuah tabel, pada aplikasi kita adalah tabel team ke tabel player, maka foreign key tersebut harus diberi nama dengan TABLE_id, dimana TABLE adaIah kata tunggal dari foreign table yang kita petakan. Dalam hal ini, kita memberi nama foreign key kita dengan nama team_id (team adalah kata tunggal dari teams).
• Tabel yang akan kita prototipe-kan harus dipetakan pada controller yang mendefinisikan variabel $scaffold.
• Apabila Anda ingin memanfaatkan keunggulan CakePHP untuk memetakan hubungan (asosiasi) antar tabel, tabel yang akan Anda prototipe-kan harus dihubungkan pada model yang mendefinisikan asosiasi tabel-tabel yang relevan. CakePHP mendukung empat jennis asosiasi antar tabel: hasOne, hasMany, belongsTo, dan hasAndBelongsToMany. Pada aplikasi kita, masing-masing pemain berasosiasi dengan satu tim, sehingga kita akan menggunakan jenis asosiasi belongsTo.

Mendefinisikan Model dan Controller

Buat file controller berikut ini dan isikan dengan script berikut :

<?php
class PlayersController extends AppController
{
var $scaffold;
}
?>


Simpan dengan nama players_controller.php dan letakkan pada direktori /app/controllers/ . Berikutnya kita akan mendefinisikan controller team. Buatlah file bernama teams_controller.php berisi script di bawah ini dan simpan pada direktori /app/controllers/ .

<?php
class TeamsController extends AppController
{
var $scaffold;
}
?>

Berikutnya, kita akan mendefinisikan model Player. Buat sebuah file bernama player.php berisi script di bawah ini dan simpan pada direktori /app/models/ .

<?php
class Player extends AppModel
{
var $name = ‘Player’;
var $belongsTo = array(’Team’ =>
array(’className’ => ‘Team’,
‘conditions’ => ”,
‘order’ => ”,
‘foreignKey’ => ‘team_id’
)
);
}
?>

Array $belongsTo telah didefinisikan, memetakan kolom team_id ke model Team. Akhirnya, kita pun harus mendefinisikan model Team sehingga CakePHP mengetahui kolom mana yang harus ditampilkan sebagai hasil pemetaan pada tabel teams. Buatlah file bernama team.php berisi script di bawah ini dan simpan ke direktori /app/models/ :

<?php
class Team extends AppModel
{
var $name = ‘Team’;
var $displayField = ‘name’;
}
?>

Percaya atau tidak, kini Anda telah memiliki sebuah aplikasi insert, edit, dan delete untuk tabel players dan teams ! Buka pada browser Anda link http://localhost/cake/teams/add dan tambahkan sebuah tim American Football baru. Tampilan list dari tim Anda setelah Anda masukkan beberapa data seharusnya terlihat sebagai berikut (http://localhost/cake/teams) :


Berikutnya, arahkan browser Anda pada link http://localhost/cake/players/add dan masukkan beberapa data pemain. Seharusnya, Anda akan melihat sebuah daftar dropdown dari data tim yang sebelumnya sudah Anda masukkan. Tampilan list pemain setelah Anda memasukkan data seharusnya terlihat seperti ini (http://localhost/cake/players/) :


Anda dapat mempelajari fitur scaffolding ini pada manual CakePHP dengan alamat http://manual.cakephp.org/chapter/scaffolding, dan jenis asosiasi (relasi) antar tabel pada alamat http://manual.cakephp.org/chapter/models.
Selamat Mencoba !

Disadur dari : idcake.web.id

Instalasi CakePHP

Aku mulai dari dasar deh. Soalnya kemarin banyak yang tanya-tanya apa itu CakePHP. Buat yang belum tau apa itu CakePHP bisa baca disini. Sekarang kita mau bahas tentang instalasi CakePHP. Sebelumnya mungkin bisa download CakePHP versi terbaru disini. Nanti disana ada 2 versi yaitu versi 1.1.x ama 1.2.x. Buat belajar pake yang 1.1.x dulu aja. Aku anggap semua udah dapat filenya ya.

kebutuhan server untuk penggunaan CakePHP ialah

  • HTTP server (apache), aku sarankan mod_rewrite nya di enable yah.
  • PHP version 4.3.2 atau yang lebih baru
  • Database server (MySQL, PostgreSQL,ADODB)

Aku asumsikan :

  • telah terinstall webserver apache dan database server mySQL
  • CakePHP 1.1.19.6305

Sekarang kita mulai

1. Extract paket CakePHP di document_root web server temen-temen

2. Masuk ke direktori app/config/ Renamefile dengan nama database.php.default menjadi database.php. buka file database.php dengan text editor.

var $default = array('driver' => 'mysql',‘connect’ => ‘mysql_connect’,

‘host’ => ‘localhost’,

‘login’ => ‘user’,

‘password’ => ‘password’,

‘database’ => ‘project_name’,

‘prefix’ => ”);

Temen-temen tinggal mengisi config database tersebut. Sebagai contoh saya menggunakan database MySQL.

var $default = array('driver' => 'mysql',‘connect’ => ‘mysql_connect’,

‘host’ => ‘localhost’,

‘login’ => ‘root’,

‘password’ => ”,

‘database’ => ‘test’,

‘prefix’ => ”);

Parameter host isikan aja ’localhost’. Untuk parameter login temen-temen isikan username databasenya. Pada server local biasanya ’root’. Parameter password, isikan password database temen-temen. Pada server local biasanya secara default kosong. Sedang parameter database, isikan database yang akan digunakan pada project.

Sampai disini instalasi udah selesai sebenernya. Sekarang tinggal dipanggil aja lewat browser. Jika temen-temen mengikuti prosedurnya dengan benar maka akan ditemukan kata-kata ’Your database configuration file is present.’ Dan ’Cake is able to connect to the database.’ Berarti temen-temen udah berhasil menginstal CakePHP. Selamat.


Klinik Sederhana 20050214

Ini adalah program pengelolaan Klinik yg sangat sederhana. Ditujukan bagi dokter atau pengusaha klinik atau rumah sakit kecil yg ingin memulai menggunakan SIM sederhana untuk mengelolanya. Program ini freeware. Jika ada ide, kritik, atau pun saran, silakan hubungi kami demi kemajuan kita bersama. Salam

Download Aplikasi Klinik Sederhana disini

Disadur dari : www.sisfokampus.net

Smart SisfoKampus 2006 (Semarang 3)

Smart SisfoKampus adalah Sistem Informasi Manajemen Kampus Indonesia. Tercermin bahwa Smart SisfoKampus ditujukan untuk mengelola Sistem Informasi Kampus, dalam hal ini adalah Perguruan Tinggi di Indonesia. Smart SisfoKampus memiliki lisensi GNU/GPL (General Public License). Dengan demikian Smart SisfoKampus dapat dipergunakan dan dimanfaatkan sepenuhnya sesuai dengan azas GNU/GPL. Jangan lupa bahwa Smart SisfoKampus adalah Open Source, maka sourcenya dapat di download bebas.

Smart SisfoKampus 2006 (versi 3 Semarang) telah tersedia. Anda dapat mendownload, mempergunakan, mempelajari dan mengembangkan Smart SisfoKampus 2006 dengan bebas sesuai dengan kaidah GNU/GPL.

Paket Smart SisfoKampus 2006 terdiri dari 2 bagian, yaitu direktori script php dan file sql database. Silakan merujuk ke halaman Panduan untuk petunjuk instalasi dan setup awal.

Untuk login pertama kali, gunakan level superuser dengan kode login: admin dan password: admin. Jika gagal, maka jalankan script berikut di MySQL:

update karyawan set Password=PASSWORD('admin') where Login='admin'

Selamat berkarya.

Download Paket Smart SisfoKampus 2006 disini

Disadur dari : www.sisfokampus.net


Program dwoprn.exe

Program dwoprn.exe adalah program pendukung untuk pencetakan ke printer dot-matrix dari aplikasi berbasis web. Penjelasan (draft) cara penggunaannya ada di dewo.wordpress.com. Selamat menggunakan, semoga bermanfaat.

Download dwoprn.exe disini

Disadur dari www.sisfokampus.net

Upload File di CakePHP

CakePHP adalah sebuah framework dengan setting yang terintegrasi, termasuk setting untuk membuat sebuah aplikasi yang menangani uploading file


Apabila Anda pernah mengembangkan sebuah aplikasi berbasis CakePHP, dengan menggunakan variabel $_FILES[”data”][”tmp_name”][”File”][’file’] di controller Anda dan ternyata mengalami kesulitan saat akan melakukan upload karena adanya restriksi file, maka Anda perlu melakukan langkah-langkah berikut ini :

1. Buka folder /cake dan buka file : basics.php
2. Cari bagian dari isi file yang berisi script berikut ini :
$data .= fread($res, 8192);
3. Pada line yang berisi $data .= fread($res, 8192); , ubah ukuran file maksimal yang sesuai dengan keinginan Anda. Jika Anda ingin meng-upload file maksimal sebesar 100 MB, maka isikan pada kolom ukuran tersebut angka 102400, dengan logika : 100 x 1024 KB = 102400 KB = 100 MB

Oke, tahap pertama selesai. Tahap kedua, kita akan melakukan sedikit “hacking” pada file php.ini. Buka file php.ini dan lakukan perubahan pada baris berikut ini :

1. ; Maximum size of POST data that PHP will accept.
post_max_size = 100M (angka 100 M adalah angka yang kita isikan. Sebelumnya berisi 8 M).

2. ; Maximum allowed size for uploaded files.
upload_max_filesize = 100M (angka 100 M adalah angka yang kita isikan. Sebelumnya berisi 8 M).

Tahap ketiga, restart Apache anda. Insya Allah, hambatan ukuran file dalam uploading akan teratasi.

Kalo file Anda di upload di webhosting tertentu, konsultasikan cara meng-kustomasi php.ini pada CS (customer service) atau konsultan teknis Anda. Selamat mengupload !!

Tutorial ini disadur dari : info.ugm.ac.id


[tanya-jawab] Session di CakePHP

From: jimmy@xxxxx.xxx
Subject: Tanya session di cake
Date: 14 Agustus 2007 11:36:45
To: sunu.wibirama@yahoo.co.id

Siang,

Mas Sunu, saya sangat kesulitan mencari referensi tentang cake php yang berbahasa indonesia. Untuk ketemu blog nya mas Sunu yang “berjalan sendirian dengan cake” tanpa ada teman :D

Mas saya punya pertanyaan tentang Session di Cake :
*) Bagaimana cara mengakses / mencetak isi dari session di cakephp ?
Contoh: kalo menggunakan php biasa, script saya adalah = echo $_SESSION[’nama session’];
Bagaimana kalau menggunakan cake ?

Terima kasih sebelumnya,
salam,

Salam kembali, makasih atas apresiasinya mas Jimmy. Session di CakePHP sepertinya tidak jauh berbeda dengan di pemrograman reguler PHP. Mungkin untuk lebih meyakinkan, silahkan cek dulu isi sessionnya (barangkali isinya adalah array), sehingga untuk mengecek, silahkan gunakan :

print_r($_SESSION[’nama_session’]);

kalau memang benar isinya array, mas Jimmy bisa mengaksesnya sebagaimana mengakses array biasa. Demikian mas, semoga membantu …

Tutorial ini disadur dari : sunu.co.nr

Sekilas Tentang CakePHP

Cake PHP atau orang lebih mengenalnya dengan nama CakePHP, adalah sebuah framework atau kerangka kerja untuk membuat aplikasi CRUD (Create, Read, Update, Delete) berbasis bahasa pemrograman PHP. CakePHP juga menjadi salah satu framework pilihan yang memungkinkan seorang developer web untuk membuat sebuah aplikasi dengan karakter pengembangan RAD (Rapid Application Development), yang memungkinkan untuk digunakan dan dikembangkan menjadi aplikasi lain yang lebih kompleks. CakePHP masih satu trah dan mempunyai hubungan darah yang cukup erat dengan Ruby on Rails, sebuah framework pemrograman Ruby. Artikel kali ini akan menjelaskan sedikit mengenai CakePHP. Harapannya, sebagai developer web kita tidak hanya terpaku pada satu metode konvensional saja, akan tetapi cobalah untuk meningkatkan kemampuan kita dalam mengembangkan aplikasi, seiring dengan semakin mudah dan berkembangnya bahasa pemrograman PHP itu sendiri.

Cake PHP dan Framework Lainnya

PHP merupakan sebuah bahasa pemrograman yang memungkinkan seorang developer membuat sebuah aplikasi berbasis web yang powerful. Seiring dengan semakin berkembangnya kebutuhan akan aplikasi berbasis PHP, dan semakin kompleksnya pengembangan aplikasi, dibutuhkan sebuah kerangka kerja (framework), yang terdiri dari file-file pustaka berupa class-class PHP yang bisa diincludekan dalam aplikasi yang sedang kita kembangkan.

Selama ini, pemahaman yang kita peroleh tentang aplikasi web berbasis PHP adalah sebuah aplikasi yang terdiri dari file-file PHP yang berisi kode-kode dan tag html yang dicampur dengan tag PHP, atau lebih dikenal dengan nama spaghetti code (iya lah, coba aja liat makanan spaghetti yang lebih mirip dengan bakmi campur). Pengembangan aplikasi berbasis konvensional seperti ini tidaklah keliru, namun akan menjadi masalah besar apabila aplikasi ini membutuhkan banyak fitur dan pengembangan di kemudian hari. Seiring dengan berkembangnya aplikasi berbasis OOP (Object Oriented Programming), akhirnya beberapa developer PHP bekerja sama untuk membuat sebuah framework yang memudahkan pekerjaan mereka dalam “mencetak” aplikasi baru. Banyak sekali framework yang beredar di internet, bahkan beberapa diantaranya membutuhkan instalasi PHP 5 (seperti Prado dan Zend). Dari beberapa framework yang ada, CakePHP adalah pilihan yang menarik dengan kemampuannya yang beragam dan adaptasinya pada instalasi PHP 4.1.x dan PHP 5.

CakePHP menjadi pilihan, karena beberapa kelebihannya, antara lain :

1. Open Source, ini adalah salah satu syarat untuk berkembangnya sebuah framework yang baik.

2. Riset yang terus-menerus dan terorganisir dengan baik. Sebuah framework bukanlah pekerjaan yang selesai dalam waktu 1 – 2 hari. Semakin terorganisirnya sebuah framework berbanding lurus dengan kualitas framework yang dihasilkan.

3. Dokumentasi yang lengkap. Framework yang baik harus mempunyai dokumentasi yang lengkap, karena sekumpulan class tanpa dokumentasi tak lebih dari sebongkah file yang asing dan menambah masalah developer. Untuk referensi lebih lengkap (gunakan manual dan API CakePHP), silahkan buka http://www.cakephp.org

4. OOP dan yang lebih penting lagi adalah MVC. MVC singkatan dari Model, View, Controller. Waduh, apalagi tuh ? Baca subbab selanjutnya !

5. CakePHP memungkinkan pengaturan user dan hak aksesnya dalam aplikasi yang kita kembangkan, dengan sarana yang lebih mudah dipahami. Fitur ini dikenal dengan nama Access Control List (ACL).

6. Scaffolding. Ya, barangkali inilah fitur yang jarang didapat pada framework lain. Hanya dengan menambahkan pada file controller Anda code :
var $scaffold ;
maka Cake akan secara otomatis mengenerate semua yang dibutuhkan untuk membuat aplikasi CRUD (Create, Read,Update, Delete) secara lengkap. Nggak percaya ? Tunggu aja edisi tutorial kelanjutan artikel ini.

Apa saja yang harus dipelajari untuk pemula ?

Untuk mempelajari CakePHP, setidaknya ada beberapa pemahaman yang seyogyanya dikuasai :

1. Pemrograman Berbasis Objek (OOP). PHP sudah mendukung OOP, dan untuk lebih memahami cara kerja framework, tidak ada salahnya anda mempelajari pola kerja OOP pada pemrograman PHP.

2. Model basis data relasional. Nggak wajib sih, tapi sangat membantu untuk memudahkan kita dalam menyusun basis data yang valid dan mudah dimengerti oleh framework. Apalagi untuk aplikasi rumit yang membutuhkan banyak tabel dan normalisasi.

3. Terminologi MVC. MVC singkatan dari Model, View, dan Controller.

Model : representasi aktif dari struktur database Anda. Framework berbasis MVC menekankan pentingnya disain database yang valid, termasuk hubungan antar tabel dalam database tersebut. Model memungkinkan developer untuk melakukan query antar database (bila memang diperintahkan oleh controller). Sebuah aplikasi MVC yang baik memisahkan antar tampilan dan logika kerja (logic). Model adalah sesuatu yang mewakili basis data yang diolah sedemikian rupa oleh controller (logic), untuk ditampilkan (view) hasil olahannya.

View : tampilan luar dari aplikasi Anda. User akan berhadapan langsung dengan tampilan ini. View tidak boleh mengandung bussiness logic, alias logika kerja aplikasi. Bisa dikatakan, view adalah template dari tampilan aplikasi Anda yang memudahkan Anda untuk menggantinya di kemudian hari.

Controller : inilah bagian yang paling signifikan dari sebuah aplikasi berbasis MVC. Benar dan tidaknya hasil olahan data akan sangat tergantung dari logika kerja aplikasi yang tersusun pada bagian controller ini. Controller akan mengolah data dari model, menyimpannya dalam variabel-variabel, dan menampilkannya pada view.

4. Last but not least adalah, segala sesuatu yang ada hubungannya dengan CakePHP, mulai dari manual, tutorial, API, artikel yang terkait dengannya, sampai kemudian contoh-contoh aplikasi yang ada. Pada bagian akhir artikel ini akan disediakan link downloadan tentang segala sesuatu yang mungkin dibutuhkan untuk pemula yang ingin mempelajari CakePHP dengan lebih sistematis.


Dari gambar di atas, cara kerja CakePHP sebagian besar sudah bisa dijelaskan. Pertama kali, user melakukan request, yang akan ditangani oleh controller. Controller memiliki banyak methode yang akan menangani request. Controller akan mengambil data pada database melalui model. Model memberikan data yang relevan kepada controller. Controller akan mengolah data dan memberikannya pada view (tampilan) yang dipilih. Tampilan inilah yang akan dilihat oleh user pada browsernya.

Adapun susunan dari instalasi Cake adalah sebagai berikut :


o app/

config/
controllers/
models/
plugins/
tmp/
vendors/
views/
webroot/

o cake/

config/
docs/
libs/

o vendors/


Keterangan lebih jauh tentang fungsi masing-masing file yang tersimpan pada folder-folder di atas bisa diakses pada http://manual.cakephp.org

Ingin tahu lebih banyak ?

Oke, ini dia saatnya bagi-bagi ilmu. Untuk lebih jelasnya, Anda semua bisa menikmati segala sesuatu yang berhubungan dengan CakePHP dengan membongkar dan mendownload yang ada pada situs :

1. Kumpulan artikel dan tutorial praktis, sudah saya rangkum dalam satu file rar, anda tinggal mendownloadnya di sini .

2. Bakery Cake, sudah saya downloadkan versi offlinenya. Tinggal klik aja di sini.

3. Wiki CakePHP. Segudang tutorial dan jurus-jurus maut CakePHP. Tinggal download aja versi offlinenya di sini dan silahkan di baca di rumah.

4. Situs resmi CakePHP, wajib dikunjungi, jika Anda memang ingin maju. Silahkan arahkan browser Anda ke http://www.cakephp.org

5. Manual CakePHP, wajib dimiliki ! Download di http://manual.cakephp.org

6. http://rossoft.wordpress.com/, blog milik salah seorang pengguna CakePHP

7. http://h3rald.com, situs bagus, kaya akan penjelasan, berikut tutorial tentang CakePHP. Di sini bisa juga ditemukan referensi website yang lebih lengkap tentang CakePHP.

8. http://cakeforge.org/, pusat download CakePHP dan segala macam project yang menggunakan CakePHP sebagai based framework-nya. Cocok buat referensi gaya coding kamu !
9. http://thinkingphp.org, sebuah blog yang mengupas habis teknik coding php yang benar dan berbasis MVC. Dibahas pula beberapa apikasi yang dibuat berdasar CakePHP.

10. http://groups.google.com/group/cake-php, kumpulan user Cake yang bergabung dalam Google user group.

11. http://cakebaker.wordpress.com, buka aja. Bagus buat renungan juga.

12. http://grahambird.co.uk/cake/ , ini wajib dibuka buat newbie. Isinya bagus banget dan mudah dipahami. Langsung mak nyus …

13. http://www.zzine.org/articles/cakephp , cukup menarik untuk lebih memahamkan kita tentang filosofi dan sejarah CakePHP.

14. http://snook.ca/jonathan/, blog pribadi. Bagus juga koq buat referensi.

15. http://snook.ca/archives/cakephp/twentyone_things/, 21 Things I learned about CakePHP. Cukup menarik untuk menambah “keimanan” kita tentang framework yang saat ini sedang kita kupas ini.

16. http://www.cakephpforum.com, unofficial forum of CakePHP.

17. http://rd11.com, project manager dari CakePHP project.

Artikel menarik :

1. http://hades.phparch.com/ceres/public/article/index.php/art::cakephp::overview

2. http://www.sitepoint.com/article/application-development-cakephp

3.http://hades.phparch.com/ceres/public/article/index.php/art::cakephp::zf_components_in_cake

4. http://devzone.zend.com/node/view/id/593

5. http://www-128.ibm.com/developerworks/edu/os-dw-os-php-cake1.html

Khatimah

Ilmu ibarat air garam di lautan, semakin sering kita minum, justru semakin hauslah kita. Dan ilmu akan bertambah manakala sang pemilik ilmu tidak sungkan-sungkan untuk berbagi dengan yang lain. Balaslah budi baik saya (wiss…) dengan mengajarkan apa yang sudah saya paparkan di atas, kepada teman Anda selanjutnya. Dan ingatlah, kita semua berangkat dari ketidaktahuan, tanpa orang lain kita bukanlah siapa-siapa.

NB : Tunggu serial CakePHP selanjutnya. Tutorial menanti Anda ….

Tutorial ini disadur dari : info.ugm.ac.id