Pengenalan CakePHP Bagian 1

Reviews
Shared by: XIAOHUI MA
Stats
views:
35
rating:
not rated
reviews:
0
posted:
10/26/2009
language:
0
pages:
0
Pengenalan CakePHP Bagian 1 Menggunakan CakePHP 1.2.0.6311 beta $Date: 2008-01-02 13:33:52 +0700 (Wed, 02 Jan 2008) “CakePHP The Rapid Development PHP Framework” merupakan Web Framework MVC di dunia PHP yang terinspirasi oleh mengeloranya popularitas RubyonRails. Mencoba menyajikan kehebatan Rails like Framework di PHP, CakePHP di design mengikuti arsitektur RoR meskipun pastinya terdapat beberapa perbedaan. Namun bagi yang telah terbiasa dengan RoR pasti tidak akan asing menggunakan CakePHP. Ada fitur ORM, Ajax, Custom Route Url, paging, caching, generator, unit test, mailer, convention over configuration, dll. Mengapa CakePHP ? untuk menyelesaikan masalah dengan set solusi yang telah di design dalam paket framework secara cepat dan lengkap (dalam arti tidak ada fitur2 besar/banyak yg mubazir), bukan malah sebaliknya yang membuat pusing dan memakan waktu development serta tools yang boros . CakePHP hadir untuk dapat digunakan dengan sangat simple, cepat dan solusi yang efektif dalam pembuatan web. CakePHP is Agile! Setelah sekian lama tidak lagi menyentuh PHP, akhirnya saya mulai lagi buka2 kode2 PHP yang lama. Ada beberapa fitur yang telah ditambahkan pada versi terakhir CakePHP dari CakePHP 1.1x yang dahulu sempat saya gunakan. Lalu mengapa sekarang saya kembali lagi menjelajah PHP? jawabannya sangat simple, karena PHP adalah solusi web development paling murah dan simple di planet bumi ini. Ga ada yang bisa ngalahin fleksibilitas deploymentnya berkat bantuan mod_php di apache server, php saat ini menguasai dunia sebagai bahasa pemograman web yang paling banyak di hosting (Namun apa jadinya jika mod_ruby telah stable ayo segera di rilis). Semudah copy paste script PHP ke doc_root web server anda, tanpa restart atau setting khusus untuk reload, just refresh your browser, and ta da… I love it so simple dan consume small hardware resources. Oke, sekarang menyiapkan alat2 yg diperlukan, webserver, database server, utk mempermudah silahkan gunakan saja XAMPP. Setelah di install, edif file apache/conf/httpd.conf cari baris mod_rewrite, ubah, jangan diberi atau hapus comment(#), dan restart apache. mod_rewrite dibutuhkan agar CakePHP dapat berjalan menggunakan pretty custom url. Download CakePHP terbaru dari situs nya. Saya menggunakan bersi nightly build 1.2.0.6311 beta menggunakan Subversion (svn export) namun jika tidak punya subversion download saja versi 1.2.x betanya. Ekstrak dan letakkan pada direktori yang disukai (tidak harus pada root web server). Agar dapat menggunakan fitur command generator, tambahkan path environtment variable untuk dapat mengakses cake.bat yang terdapat pada CAKE_ROOT\cake\console\ Gambar 1 Setting Environtment Variable PATH Sekarang memulai membuat project baru. Buat folder baru c:\xampp\htdocs\caketest. Jalankan command line pada folder caketest. C:\xampp\htdocs\caketest>cake bake Welcome to CakePHP v1.2.0.6311 beta Console --------------------------------------------------------------App : caketest Path: C:\xampp\htdocs\caketest --------------------------------------------------------------- Bake Project Skel Directory: D:\WebApps\cake\cake1.2.nightly\cake\console\lib Will be copied to: C:\xampp\htdocs\caketest --------------------------------------------------------------Look okay? (y/n/q) [y] > Setelah menjawab „y‟ maka generator akan mencoba untuk membuat configurasi database --------------------------------------------------------------Created: caketest in C:\xampp\htdocs\caketest --------------------------------------------------------------Creating file C:\xampp\htdocs\caketest\views\pages\home.ctp Wrote C:\xampp\htdocs\caketest\views\pages\home.ctp Welcome page created Random hash key created for 'Security.salt' CAKE_CORE_INCLUDE_PATH set to D:\WebApps\cake\cake1.2.nightly i CAKE_CORE_INCLUDE_PATH set to D:\WebApps\cake\cake1.2.nightly i Remember to check these value after moving to production server Your database configuration was not found. Take a moment to cre Database Configuration: Name: [default] > Username mysql secara default adalah „root‟ dengan password kosong. Ikuti langkah2nya hingga selesai ----------------------------------------------------The following database configuration will be created: ----------------------------------------------------Name: default Driver: mysql Persistent: false Host: localhost Port: 3306 User: root Pass: ******** Database: caketest Table prefix: Schema: Encoding: ---------------------------------------------------------Look okay? (y/n) [y] > y Do you wish to add another database configuration? [n] > n Creating file C:\xampp\htdocs\caketest\config\database.php Wrote C:\xampp\htdocs\caketest\config\database.php Karena project dibuat pada direktori htdocs yg merupakan document root web server apache, maka web bisa langsung diakses dari browser. Pastikan apache server telah berjalan, gunakan XAMPP Control Panel. Kemudian akses http://localhost/caketest Gambar 2 CakeGotBaked Great! You have baked your cake! So sweet. CakePHP telah mempermudah perkerjaan membuat initialization project website secara cepat menggunakan fitur generator cake bake. Jika halaman yang tampil error, periksa lagi langkah2 yang telah dilakukan coba lengkapi dan jangan lupa untuk mempersiapkan XAMPP beserta edit konfigurasi httpd.conf Lihatlah struktur forlder project caketest : Gambar 3 Project Tree CakePHP MVC Pattern memisahkan alur aplikasi menjadi 3 bagian utama, yaitu Controller, Model, dan View. Controller mengatur alur lalu lintas yang memanggil Model dan menentukan View. Model berisi business logic dan umumnya berkaitan dengan proses ke database, meskipun tidak harus selalu. View berperan untuk menyajikan presentasi ke user dalam bentuk sesuai yang di request, xml, html, js, dll. Oke sekarang mulai untuk implementasi konsep MVC. Coba kembali lihat gambar 2 dibawah ada pesan “cake is Not able to connect to the database” . CakePHP memberi tahu bahwa koneksi ke database tidak dapat dilakukan. Pastikan konfigurasi database pada saat digenerate tadi telah sesuai. Dapat dilakukan modifikasi konfigurasi pada file config\database.php. Kemudian create database sesuai dengan konfigurasi, dalam hal ini „caketest‟. Gunakan saja phpmyadmin yang sudah dibundle oleh XAMPP. http://localhost/phpmyadmin/ Akses kembali browser http://localhost/caketest niscaya pesannya akan berubah menjadi “Cake is able to connect to the database”. Selamat, selamat, selamat… Baiklah sekarang saatnya membuat aplikasi web sederhana untuk membuktikan kelezatan CakePHP yang sangat hebat. Saya akan membuat contoh simple webblog agar mudah untuk dimengerti pengguna awam secara design aplikasi dan sudah mencakup sebagian konsep pemograman yang ada di dunia web. Hal pertama yang harus dilakukan adalah menentukan Struktur Database caketest. Blog setidaknya memiliki post dan category. Untuk masing2 post akan memiliki satu category, sedangkan satu category berisi banyak (0 atau lebih) post. Coba direnungkan dulu, dan dimengerti maksudnya. Diawal telah disebutkan bahwa CakePHP menggunakan prinsip ConventionOverConfiguration. Maksudnya adalah kita tidak perlu membuat konfigurasi bermacam2 namun cukup ikuti saja aturan dari CakePHP agar CakePHP dapat membuat membaca configurasi on the fly dinamis secara otomatis. Hal pertama yang harus diingat adalah nama table haruslah plural. Kemudian foreign_key adalah namatableforeignsingular_id. Berikut sql syntax dari dua table posts dan categories CREATE TABLE `categories` ( `id` int(10) NOT NULL auto_increment, `name` varchar(50) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `posts` ( `id` int(10) NOT NULL auto_increment, `title` varchar(100) default NULL, `content` text, `created` datetime default NULL, `updated` datetime default NULL, `category_id` int(10) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Perhatikan foreign key category_id pada posts dibuat sesuai dengan konvensi yang diatur oleh CakePHP. Dengan begitu CakePHP akan dapat membuat mapping relasi table secara otomatis. Pastikan telah dibuat dua table diatas. Kemudian buka kembali command prompt untuk melakukan generate controller, model, dan view secara otomatis. C:\xampp\htdocs\caketest>cake bake all Welcome to CakePHP v1.2.0.6311 beta Console --------------------------------------------------------------App : caketest Path: C:\xampp\htdocs\caketest ----------------------------------------------------------------------------------------------------------------------------Bake All --------------------------------------------------------------Possible Models based on your current database: 1. Category 2. Post Enter a number from the list above, type in the name of another model, or 'q' to exit [q] > 1 Perintah diatas bertujuan untuk mengenerate file2 controller, model, dan view untuk Model Category. CakePHP otomatis mendeteksi table2 apa saja yang ada di database. Setelah selesai lakukan perintah tersebut kembali, kali ini untuk model Post. Bake All --------------------------------------------------------------Possible Models based on your current database: 1. Category 2. Post Enter a number from the list above, type in the name of another [q] > 2 One moment while the associations are detected. Ketika melakukan generate dengan perintah cake bake all tadi, pada command prompt akan muncul Cake test suite not installed. [y] > y Do you want to bake unit test files anyway? (y/n) CakePHP memiliki fitur test unit dan sangat menganjurkan untuk menggunakannya, sehingga akan otomatis di generate ketika melakukan generate baik itu untuk Model maupun untuk Controller. Saya akan membahas mengenai Test Driven Development dengan CakePHP pada edisi berikutnya, tunggu saja. Untuk saat ini jawab saja „y‟. File-file hasil generate dapat ditelusuri pada folder controllers, models, views, serta tests. Setelah selesai maka simple weblog dengan CakePHP telah siap untuk dijalankan. Coba sekarang buka kembali browser arahkan ke alamat http://localhost/caketest/categories aplikasi telah siap untuk dicoba, silahkan menambahkan kategori baru pada link yg tersedia. Wow, bagaimana bisa ini terjadi ? simple, so sweet. Table dibagian bawah merupakan informasi operasi sql query yang dilakukan oleh CakePHP. Ditampilkan secara otomatis oleh cake karena secara default project berada dalam modus development. Ini berguna untuk melakukan tracing, optimizing, dll, dalam tahap development. Namun jika ingin menghilangkannya sangat mudah ubah saja konfigurasi nya di conf\core.php // level debug diubah menjadi 1 Configure::write('debug', 1); Save file core.php dan refresh browser niscaya table tersebut akan menghilang. Wah, saya ingin menulis sesuatu pada aplikasi simpleblog, bagaimana caranya ? Oke cukup akses ke http://localhost/caketest/posts Coba tambahkan post melalui link yang tersedia. Maka akan muncul form Add Post. Wow bagaimana bisa Category yang telah saya buat sebelumnya langsung dikenali pada form Add Post, coba perhatikan. Setelah post di submit pada halaman list post terdapat field created dan updated yang telah terisi, padahal pada form Add Post tidak ada dan tidak diisi field tesebut . Wah? Lagi2 bagaimana bisa? Field created dan updated merupakan keyword magic dari CakePHP yang akan didetect secara otomatis. Ketika melakukan save ataupun update kedatabase maka kedua field ini akan secara otomatis diisi. Cobalah melakukan edit pada post yang telah dibuat tadi, Halaman akan bepindah ke Form Edit Post dan field2 pada form otomatis akan berisi data2 sebelumnya. Setelah selesai submit. Lihatlah pada list post, field updated akan berubah sesuai waktu pada saat melakukan update sedangkan field created tetap tidak berubah. So smart. Sekarang tinggal mengubah url root aplikasi simpleweblog ini agar langsung menampilkan halaman post. Modifikasi file conf\router.php seperti berikut Router::connect('/', array('controller' => 'posts', 'action' => 'index')); //Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); Dengan begini makan untuk root url akan otomatis diarahkan ke controller posts dengan action index. Save file dan akses halaman http://localhost/caketest/. Ta.. da… berhasil, telah diterapkan custom route mapping sehingga url tersebut mengarahkan ke controller yang diinginkan. Sekarang mari membedah source code yang dihasilkan oleh cake bake tadi. Akan dipelajari bagaimana hal ini dapat terjadi dengan sangat mudah. Model : Buka folder models 1.category.php 2.post.php Aturan konvensi CakePHP yang berikutnya adalah nama file model berupa singular (ingat konvensi sebelumnya, nama table plural). Buka file category.php array('className' => 'Post', 'foreignKey' => 'category_id', 'dependent' => false, 'conditions' => '', 'fields' => '', 'order' => '', 'limit' => '', 'offset' => '', 'exclusive' => '', 'finderQuery' => '', 'counterQuery' => '' ) ); } ?> Variable $name merupakan penamaan dari Model itu sendiri, untuk nantinya dapat digunakan oleh Controller. Berikutnya variable $hasMany yang berupa array, berisi konfigurasi relasi table database. Disini maksudnya adalah, Category memiliki banyak Post, mengguanakan foreign_key category_id. Untuk lebih detail mengenai opsiopsinya silahkan mengacu pada CakePHP manual atau API. Kemudian buka file post.php array('className' => 'Category', 'foreignKey' => 'category_id', 'conditions' => '', 'fields' => '', 'order' => '' ) ); } ?> Terdapat perbedaan, jika pada category.php $hasMany, maka pada post.php $belongsTo. Ini menyatakan bahwa Post adalah milik dari Category, sedangkan Category memiliki banyak Post. Tentunya satu Post akan memiliki satu Category. Loh? Sudah seperti itu saja? Kok begitu? Lalu fungsi2 untuk create, read, update, delete (CRUD) data dimana ? katanya Model itu berisi business Logic? Kok hany konfigurasi saja? Bagaimana ini? Tenang, pak, buk. CakePHP memiliki fitur ORM (Object Relational Mapping) yang pintar, memiliki hidden method yang dibuat on the fly berdasarkan struktur table yang direpresentasikan oleh Model tersebut. Loh maksudnya gmana? Bukan ilmu santet kan? Mari kita coba saja langsung praktek. Saya akan memperkenalkan dengan fitur canggih CakePHP lainnya, bernama Cake Console. Fitur ini merupakan interaktif console yang dibuat untuk melakukan test terhadap beberapa bagian (Model, Route) pada aplikasi tanpa harus membuat tampilan webnya. Ah apalagi ini?? Langsung saja dimulai buka command prompt. C:\xampp\htdocs\caketest>cake console Welcome to CakePHP v1.2.0.6311 beta Console --------------------------------------------------------------Model classes: -------------- Category - Post - Category - Post App : caketest Path: C:\xampp\htdocs\caketest --------------------------------------------------------------> $Post->findAll() Post id: 1 title: Hello content: [updated] Hello World created: 2008-04-10 15:08:30 updated: 2008-04-10 15:14:55 category_id: 1 Category id: 1 name: cake Saya mencoba melalukan read data dari model Post menggunakan perintah $Post->fiindAll() yang akan mengembalikan semua post yanga ada didatabase. Lihatlah data category juga ikut dibaca secara otomatis (kerjaannya ORM). > $Post->findByTitle('Hello') Post id: 1 title: Hello content: [updated] Hello World created: 2008-04-10 15:08:30 updated: 2008-04-10 15:14:55 category_id: 1 Category id: 1 name: cake > $Post->findByTitle('ello') No result set found Saya mencoba untuk membaca data berdasarkan field title. Ajaib padahal fungsinya belum didefinisikan di model. Ya ini lah yang saya sebut diatas on the fly. Fungsi dinamis. Tinggal mengikuti konvensinya, yaitu $Model->findBy[NamaField]() perhatikan fungsi ini case sensitive. Untuk fungsi2 magic lainnya pada Model silahkan mengacu ke CakePHP Manual atau API Model : Buka folder controllers 1.categories_controller.php 2.posts_controller.php Konvensi CakePHP yang berikutnya adalah nama file Controller berupa plural_controller.php. Buka file posts_controller.php. Saya akan menjelaskan secara singkat beberapa fungsi yang terdapat pada file tersebut. Controller merupakan pengatur utama jalannya aplikasi dengan CakePHP yang merupakan MVC Framework. Route mapping url pada CakePHP sebagai berikut http://localhost/appname/controller/action/param -> posts_controller.php diakses melalui url http://localhost/appname/posts method index pada posts_controller.php akan otomatis dijalankan apabila tidak ada informasi action yang direquest pada url. http://localhost/appname/posts/view/1 akan mengakses method view pada posts_controller.php dan function view($id = null) { if (!$id) { $this->Session->setFlash(__('Invalid Post.', true)); $this->redirect(array('action'=>'index')); } $this->set('post', $this->Post->read(null, $id)); } Variable $id akan diisi dengan 1 karena tadi direquest dengan informasi param = 1. Sekarang coba tambahkan fungsi baru pada posts_controller.php, misal hello() function hello($wannaSay = null) { if($wannaSay == null) $wannaSay = ‘Hello’; $this->set('say', $wannaSay); } Didalam fungsi tesebut saya memanggil fungsi set(„say‟,‟hello‟). Anggap fungsi ini seperti hash ataupun array yang memiliki key dan value, „say‟ merupakan key dan $wannaSay merupakan valuenya. Setelah melakukan set maka pasangan hash tersebut dapat dibaca pada bagian View. Sekarang coba akses http://localhost/caketest/say Pastinya akan muncul error seperti ini : Error: The view for PostsController::say() was not found. Error: Confirm you have created the file: C:\xampp\htdocs\caketest\views\posts\say.ctp Ingat CakePHP merupakan Framwork MVC yang memisahkan masing-masing tugas, untuk tugas tampilan diserahkan kepada bagian view. CakePHP mendeteksi bahwa method say() tidak memiliki view, dan menyarankan untuk membuatnya pada lokasi tersebut. Konvensi berikutnya pada View file berekstensi .ctp. Untuk itu mari kita buat file say.ctp dengan isi seperti ini

I wanna say

$say akan otomatis dikenali oleh bagian View karena dianggap sebagai key dari hash yang telah diset dibagian controller tadi, yang mana isinya adalah $wannasay. Jika tidak percaya coba akses kembali http://localhost/caketest/say. View pada CakePHP menerapkan fitur Layout dimana kita tidak perlu melakukan berulang buka tag html body tutup lagi, cukup dengan buat layout utamanya kemudian digunakan bersama2. Buka file views\layouts\default.ctp Perhatikan bagian berikut Perintah tersebut akan diisi oleh template dari masingmasing view dari method yang ada pada controller anda. Untuk itu View dari method say() hanya saya isi dengan tag

tanpa ada embel buka tutup html. Great! Yap, berhasil…, konsep MVC telah diterapkan dengan sukses. Kini anda mengerti ? Hal yang harus diingat adalah jangan ada proses logic didalam View meskipun bisa, karena hal ini akan menyalahi konsep MVC. Biarkan bagian controller yang mengaturnya dengan proses business logic berasal dari Model. Sehingga misalkan bekerja dalam team, bagian View dapat dikerjakan terpisah oleh designer. Loose Couple dan punya tanggung jawab masing-masing. Coba kembali akses http://localhost/caketest/say/thank-you-irfani. Lihatlah apa yang terjadi dan coba temukan sendiri jawabannya mengapa bisa seperti itu. Penjelasan singkat terhadap source code hasil generate dari cake bake : posts_controller.php - $this->redirect(array('action'=>'index')) mengalihkan halaman kehalaman yang dituju $this->redirect(array(„controller‟=>‟posts‟, 'action'=>'say‟)) - $this->Session->setFlash(__('Invalid id for Post', true)) melakukan set pesan pada session flash (session khusus CakePHP yang akan dihapus setelah diakses) Maaf jika penjelasaan ini kurang dimengerti, anda harus mengerti konsep session terlebih dahulu. Sedangkan __(underscore) ini adalah fitur internationalization bawaan dari CakePHP yang akan mentranslate pesan tersebut jika anda menerapkan internationalization (i18n) Mungkin akan saya bahas pada artikel CakePHP edisi berikutnya - $this->data menyimpan array data yang dikirim melalui form - $this->Post->recursive = 0 Menyatakan bahwa relasi table dari Model Post tidak usah untuk di Load st rd (Performance). Anda bisa melakukan load data Model relasi 1 level hingga 3 level (namun boros) gunakan pada saat yang tepat - $helpers = array('Html', 'Form') melakukan load terhadap helper(library) yang akan digunakan oleh bagian View views\posts\add.ctp create('Post');?>
input('title'); echo $form->input('content'); echo $form->input('category_id'); ?>
end('Submit');?> .. .. $html->link(__('List Posts', true), array('action'=>'index'));?> - $form, $html merupakan helper library CakePHP untuk memudahkan operasi pada form $form->create(„Post‟) membuat form yang mengakses ke posts_controller, method add $form->input() membuat input tag/widget sesuati dengan tipe nya „title‟ jadi textfield, „content‟ jadi text area, „category_id‟ jadi select option (combox box) yang otomatis dimapping ke table categories $html->link(„link title‟, „/route/map/url‟) membuat tag Baiklah sekian saja dahulu pengenalan CakePHP bagian 1, saya Insya4WI akan menulis lagi artikel CakePHP berikutnya yang akan membahas TestDrivenDevelopment With CakePHP, Webservice, Reporting.. nantikan Oops ada yang kelupaan validasi Model. Maaf, saya selipin disini aja. Saya mau ketika add post dan comment field2 yang ada haruslah diisi, jika tidak munculkan pesan error. Wah susah dong buatnya? Tenang ga rumit kok, beneran. Hanya menambahkan beberapa baris saja di Model. Buka file models\post.php category.php post.php tambahkan code berikut var $validate = array( 'title' => VALID_NOT_EMPTY, 'content' => VALID_NOT_EMPTY, ); category.php tambahkan code berikut var $validate = array( 'name' => VALID_NOT_EMPTY ); Sekarang coba Add Posts maupun Categories. Anda harus mengisi form dengan lengkap, jika tidak CakePHP akan memberikan pesan kesalahan. Untuk metode validasi lebih lanjut silahkan mengacu pada CakePHP manual atau API Selamat mencoba, jika mengalami kesulitan coba temukan masalahnya sendiri dulu, lebih teliti lagi, kemudian baca CakePHP manual dan atau API. Jika telah berhasil coba buat controller baru model baru view baru tanpa menggunakan cake bake generator. Hal ini agar membiasakan diri dengan perintah2 CakePHP, nah jika kemudian telah mahir, ngapain susah2 create manual, kalo ada yg cepat ngapain pilih yg lama, more productive more efisien. Gunakan cake bake, and your cake got baked By CakePHP


Related docs
Pengenalan Pemrograman Komputer
Views: 280  |  Downloads: 38
4. Pengenalan Template
Views: 58  |  Downloads: 6
BAB I KONSEP DATABASE DAN PENGENALAN ACCESS
Views: 2415  |  Downloads: 313
pengenalan_ikan_hias
Views: 78  |  Downloads: 4
pengenalan SPSS
Views: 214  |  Downloads: 25
PTI1
Views: 176  |  Downloads: 15
Pengenalan Mikroskop
Views: 59  |  Downloads: 0
Dasar Pengenalan tentang Komputer
Views: 414  |  Downloads: 47
PENGENALAN KOMPONEN KOMPONEN ELEKTRONIKA
Views: 5611  |  Downloads: 222
Pengenalan PJ
Views: 75  |  Downloads: 4
M1- pengenalan_pc
Views: 5  |  Downloads: 1
jaringan komputer
Views: 414  |  Downloads: 66
premium docs
Other docs by XIAOHUI MA
GroupFIT Classes
Views: 101  |  Downloads: 0
Group Pilates Training Program
Views: 96  |  Downloads: 0
GROUP FITNESS
Views: 94  |  Downloads: 0
Group Fitness Timetable
Views: 91  |  Downloads: 0
group fitness timetable - The Exchange
Views: 79  |  Downloads: 0
Group Fitness Site - RFP
Views: 90  |  Downloads: 0
Group Fitness September 2007
Views: 76  |  Downloads: 0
Group Fitness September 2007
Views: 78  |  Downloads: 0
group fitness schedule
Views: 90  |  Downloads: 0
Group Fitness Schedule
Views: 83  |  Downloads: 0