Professional Documents
Culture Documents
Nazli
Alias
Bina Blog Guna CakePHP ver 1.0
rev 1 ( 26/07/2009 )
Prakata
Alhamdulillah, akhirnya saya berjaya menyiapkan panduan Bina Blog Guna CakePHP sebagai modul
untuk training CakePHP. Panduan ini menggunakan CakePHP 1.2 dan Xampp 1.7 For Windows.
Untuk mengikuti panduan ini dengan sempurna, anda perlu ada pengalaman aturcara
menggunakan PHP seperti
- Bina module Create Read Update dan Delete guna PHP dan MySQL
- Memahami asas Array
- Tahu bagaimana membaca data dari var_dump
- Tahu asas HTML,CSS dan Javascript
- Tahu asas SQL ( MySQL )
- Biasa menggunakan PHPMYADMIN
3 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Hanya ringkasan blog yang ditayangkan di muka hadapan, pembaca perlu klik pautan Lanjutan
untuk membaca isi penuh blog.
Blog perlu dikategorikan contohnya kategori Masakan, Hobi, Filem dan sebagainya. Blog perlu di tag
contohnya blog berkaitan makanan perlu di tag dengan sup, jenis rempah dan sebagainya.
Setiap ringkasan blog perlu disertakan tarikh blog ditulis, jumlah komen yang diterima, kategori dan
juga senarai tag.
Table posts :
Table comments :
Post Model
Membina Model untuk table posts
Model di dalam CakePHP adalah pintu masuk dan keluar data dari pengkalan data, dan dalam kes
ini data dari table posts di kawal oleh model bernama Post. Kebiasaanya nama model adalah
singular kepada nama table. Jika menggunakan Bahasa Inggeris untuk nama table, sila amalkan
penamaan plural, contohnya
Setelah model untuk table posts dibina, seterusnya controller untuk model Post perlu dibina di
dalam blog/app/controllers/posts_controller.php
blog/app/controllers/posts_controller.php
Scaffold
Scaffold ialah satu mekanisma di dalam CakePHP di mana kita boleh menambah, kemaskini, padam
dan senaraikan data mengikut table. Dan di dalam kes ini, kita akan melihat scaffold untuk posts.
Sila ke http://localhost/Posts * biasanya gunakan nilai var $name di dalam controller.
Message Flash
Blog lists
Scaffold Actions
Cake Debug
Scaffold memudahkan kita melihat struktur table dan untuk mengisi data contoh.
8 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
CONTROLLER – nama controller, contohnya Posts * mengikut nilai var $name yg disetkan di dalam
controller.
Contoh:
http://localhost/blog/Posts/12
9 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Layouts
Untuk system blog ini, kita akan gunakan layout yang dibina sendiri, tanpa menggunakan layout
yang disediakan oleh CakePHP. Kita akan menggunakan layout yang cukup ringkas seperti berikut
BLOG HEADER
Navigation Links
Footer
Cipta fail layout yg baru menggunakan struktur HTML seperti di atas. Kita akan menggunakan
struktur HTML yang seperti berikut untuk memudahkan pemahaman.
10 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
default.ctp
<!—blog/views/layouts/default.ctp -->
<html>
<head>
<title>Blog Azril :: <?= $this->pageTitle; ?></title>
<?= $html->css('blog'); ?>
</head>
<body>
<div id="wrap">
<div id="header"><h1>Blog Azril</h1></div>
<div id="nav">
<ul>
</ul>
</div>
<div id="main">
<? $session->flash(); ?>
<?= $content_for_layout; ?>
</div>
<div id="sidebar">
<h2>Column 2</h2>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Mauris vel magna.</p>
<ul>
</ul>
</div>
<div id="footer"><p>Hakcipta Terpelihara</p></div>
</div>
</body>
</html>
Contoh layout yang akan digunakan. Column 1 ialah di mana data dari CakePHP akan di paparkan.
Column 2 berfungsi sebagai Sidebar,
Sidebar dan Navigation terletak di antara header dan main content.
content
15 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Ini akan menjadikan bila http://localhost/blog dibuka, ia akan menggunakan Posts Index sebagai
muka utama.
16 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Contoh if else
<? If( $var == true ): ?>
….HTML Code…
…HTML code…
...HTML code…
…HTML code…
Contoh echo
echo variable di dalam HTML
<? debug($variable); ?
17 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
CakePHP mempunyai cara susunan Array yang tersendiri. Untuk melihat nilai yang diberikan
kepada variable $posts, anda boleh menggunakan arahan debug();
18 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
function index(){
$posts = $this->Post->find(‘all’);
debug($posts);
$this->set(compact(‘posts’));
}
Hasilnya :
Dari bentuk Array() yang ditunjukkan, jelas sekali CakePHP menyusun data mengikut format berikut
Rujukan : http://book.cakephp.org/view/640/Set
http://book.cakephp.org/view/640/Set
$this->set(compact(‘posts’));
Juga sama dengan
$this->set(‘posts’, $posts );
Arahan di atas membolehkan nilai $posts diakses dari index.ctp dan seterusnya nilai Array tersebut
dikeluarkan menggunakan arahan Foreach Loop
Salin fail di atas dan save sebagai blog/app/views/posts/index.ctp ( jika folder posts tidak wujud,
sila create dahulu )
atau
$this->Model->find
Rujukan : http://book.cakephp.org/view/449/find
Jika dalam PHP biasa, untuk mengeluarkan data anda akan melakukan select query seperti berikut
<?
mysql_connect(localhost,$username=”root”,$password=””);
@mysql_select_db($database) or die( "Unable to select database");
$query="SELECT * FROM posts";
$posts=mysql_query($query);
$num=mysql_numrows($result);
mysql_close();
?>
Di dalam CakePHP,
CakePHP arahan di bawah menyamai operasi seperti kod di atas
$this->Post->find(‘all’);
$this->Post->findbyId($id);
Action Add
Seterusnya, kita akan bina system di mana kita boleh menambah data ke dalam system. Action ini
dinamakan add dan diakses menerusi http://localhost/blog/posts/add
Antara perkara yang kita perlu buat dalam bab ini ialah
Form Validation
Rujukan online : http://book.cakephp.org/view/125/Data-Validation
Form Validation membolehkan kita menapis data yang diterima dari form atau borang online. Jadi
dengan menggunakan fungsi terbina dalam Form Validation, kita boleh menetapkan rules untuk
setiap form field.
Post.title rules
Contohnya untuk field title, anda mungkin ingin menetapkan beberapa criteria seperti :
1. Post.title tidak boleh kosong atau blank. Wajib diisi oleh penulis blog.
2. Post.title tidak menerima aksara melebihi 100
Mengikut criteria di atas, Post.title perlu melepasi 2 rules untuk Berjaya disimpan di dalam
database.
Untuk mencapai objektif di atas, kita perlu membuat multiple form validation di dalam Post model.
model.
23 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Cipta fail bernama add.ctp di dalam folder blog/app/views/posts/add.ctp . Fail ini berfungsi
menerima dan menghantar data ke Posts Controller menerusi action add. Di dalam fail ini, kita akan
bina borang online ( form ) . Kita akan gunakan Form Helper untuk membina borang online.
Kebiasaanya anda akan menulis form seperti berikut
Jika penulis blog menekan button submit, data dari from akan dihantar ke function add di dalam
controller. Data tersebut dikumpulkan di dalam susunan array $this-
$this->data . Di dalam function add,
controller akan menunggu kehadiran variable $this-
$this->data . Jika $this->data dikesan, controller akan
laksanakan arahan $this-
$this->Post-
>Post->create().
>create() Arahan ini berfungsi untuk member tahu system bahawa
ianya akan mencipta data baru di dalam database. Seterusnya arahan untuk penyimpanan data
dilaksanakan oleh $this->Post->save($this->data). Jika data berjaya disimpan di dalam database,
controller akan memberikan mesej flash ‘Blog
Blog berjaya ditambah’
ditambah dan kemudiannya controller akan
redirectkan browser ke action index di http://localhost/blog/posts/index . Sebaliknya, jika data tidak
berjaya ditambah, controller akan trigger mesej ralat ( error mesej ) di add.ctp. Error biasanya
disebabkan oleh data tidak melepasi form validation yang telah ditentukan sebelum ini.
26 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Jika anda melihat kembali kod view add.ctp , lihat kod di bawah
<tr>
<td>Tajuk</td> Paparan form error
<td width="100%">
<?= $form->text('title'); ?>
<br />
<?= $form->error('title'); ?>
</td>
</tr>
<?= $form-
$form->text(‘title’); ?> akan menghasilkan form tag untuk title, manakala
<?= $form-
$form->error(‘title’); ?> akan paparkan mesej error jika data tidak mengikut criteria dalam Form
Validation yang telah ditentukan di dalam Post Model.
Model Sekira data berjaya di tambah, anda akan
dapat paparan seperi berikut :
27 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Flash Message
Bina Controller
Controller untuk View
Penerangan
Di line 27, controller view akan periksa kehadiran nilai id. Nilai $id dihantar menggunakan alamat
internet seperti
Jika tiada nilai $id, controller akan redirect browser ke action index ( line 29 ). Seterusnya, jika nilai
id adalah sah, variable $post akan diberi dengan nilai data yang dicari menggunakan
$this-
$this->Post-
>Post->findById($id) . Seterusnya nilai $post akan dihantar ke view menggunakan arahan
$this-
$this->set(compact(‘post’)) .
30 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Di dalam CakePHP, kita akan gunakan HTML Helper untuk membuat pautan :
- <?= $html->link(“Seterusnya”, array(‘controller’ => ‘Posts’, ‘action’ => ‘view’, 12); ?> akan
menghasilkan pautan berbentuk <a href=”/blog/posts/view/12”>Seterusnya</a>
Paparan Index selepas diubah suai. Pengunjung laman web kini boleh klik link Baca blog. Setiap link
akan membaca id yang berlainan.
Inilah hasil untuk view. Sila lihat id yang dibawa. Dan juga ada pautan kembali ke senarai blog.
32 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Line 37 hingga 42 adalah proses di mana jika controller edit menerima dari edit form,
form ia akan
secara automatik kemaskini
kemaskini data berdasarkan nilai hidden id.
id Untuk melihat struktur data yang
telah dihantar, boleh gunakan arahan debug($this-
debug($this->data)
Line 45 hingga 48 akan redirect browser ke index jika tiada nilai $id yang diterima
Line 51 adalah di mana controller akan menerima id dari URL. Dengan menggunakan id tersebut,
controller akan panggil data dari database dan assignkan ke variable $this-
$this->data . Variable
$this-
$this->data akan digunakan oleh form helper, dan data akan dipaparkan ke browser.
33 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Bina edit.ctp
Lokasi fail : blog/app/views/posts/edit.ctp
blog/app/views/posts/edit.ctp
Struktur fail edit.ctp hampir sama dengan add.ctp. Yang berbeza cuma penambahan hidden field
form untuk id.
id Jadi anda boleh salin fail add.ctp ke edit.ctp dan ubah suai dengan menambah
arahan di line 3
34 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Hasilnya
Data dari database secara automatik dimasukkan ke dalam form field ( selepas variable $this->data
berjaya mengambil nilai dari database menggunakan id yang diberi )
36 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Ciri-ciri
Berdasarkan criteria di atas, hanya 2 fail akan terlibat, iaitu posts_controller.php dan index.ctp.
Untuk memadam ( delete ) data dari database, kita akan gunakan arahan berikut :
$this-
$this->Post-
>Post->delete
>delete($id);
ete($id);
Dan untuk membina link beserta dengan dialog pengesahan, arahannya seperti berikut :
Hasil
Jika anda klik link Padam, dialog pengesahan akan keluar dan jika berjaya padam blog, system akan
member mesej flash di atas
39 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Pagination
Rujukan : http://book.cakephp.org/view/164/Pagination
Pagination adalah penting dalam membina system blog yang mudah untuk digunakan. Bayangkan
jika anda mempunyai 100 tajuk blog, dan jika tidak menggunakan system Pagination, blog anda
akan menyenaraikan kesemua 100 tajuk blog di mukasurat yang sama. Sistem Pagination
membolehkan anda menyenaraikan 10 ( ikut suka ) blog terkini dan akan memaparkan link untuk
mukasurat kedua, ketiga dan seterusnya.
Pagination Helper dalam CakePHP cukup mudah untuk digunakan. Kita akan ubahsuai kod di dalam
Posts Controller untuk menggunakan Pagination
Ubahsuai posts_controller.php
Sila tambah kod untuk Pagination dari line 7 hingga 13. Kemudian ubah kod 16 untuk
menggunakan $this-
$this->Paginatte(‘Post’);
Penerangan
- fields @Line 8 ~ hanya pilih field,field yang berkaitan sahaja
- limit @ Line 9 ~ limitkan jumlah blog yang dipaparkan hanya 2 sahaja
- order @ Line 10 ~ ordering untuk data yang dikeluarkan
- Paginate @ line 16 ~ nilai $posts akan menggunakan Paginate yang sebelum ini gunakan
$this->Post->find(‘all’)
Ubahsuai index.ctp
Hasilnya
Blog anda kini sudah hampir lengkap, tetapi tanpa system Authentication, sesiapa sahaja boleh
menambah,kemaskini malah padam data dari blog anda. Masalah ini dapat diselesaikan dengan
membenarkan hanya pemilik blog sahaja boleh mengurus data blog. Oleh itu kita perlu tetapkan
criteria untuk system Authentication.
Kriteria
- Pemilik blog perlu daftarkan diri mereka dahulu ( gunakan User $scaffold )
- Setelah berjaya daftar, matikan $scaffold untuk User.
- Bina sistem login dan logout
- Bila pemilik blog login ke dalam system, setkan variable $logged dengan nilai id User dari
database.
- Hanya action index dan view sahaja dibenarkan untuk public, action yang lain perlukan Auth
sebelum boleh diakses.
- Bina table users untuk simpan data pengguna
- Gunakan Auth Component
- Bina fail blog/app/app_controller.php dan loadkan Auth component ~ App / Global
Controller
- Bina fail blog/app/controllers/users_controller.php ~ Users Controller
- Bina fail blog/app/models/user.php ~ User Model
Untuk menambah user, hidupkan sementara va4r $scaffold ( line 6 ). Setelah tamat menambah
user, sila nyah aktifkan line 6.
Tambah User
Anda perlu tambah satu user supaya anda boleh login menggunakan id pengguna dan kata laluan
user tersebut. Untuk itu, anda perlu mengubah senarai $this->Auth->allow() di app_controller untuk
menambah add di dalam senarai itu.
Kemudian anda perlu hidupkan fungsi $scaffold di dalam Controller User, untuk membolehkan anda
mamasukkan user pertama anda melalui http://localhost/blog/users/add . Setelah tamat,
kembalikan konfigurasi 2 fail tersebut seperti asal.
Jika anda melihat data table users di dalam phpMyAdmin, data akan seperti berikut
CakePHP secara automatic menerima data dari field username dan password dan seterusnya hash
kan password tersebut secara automatic. Kaedah automagic ini hanya berlaku jika anda
menggunakan table bernama users dan menggunakan field menggunakan nama ‘username
username’
username dan
‘password
password ‘sahaja,
CakePHP akan redirect browser anda ke ruangan login. Ini disebabkan kita hanya benarkan action
index dan view sahaja yang boleh diakses oleh pengunjung anonymous.
Seterusanya masukkan id pengguna dan katalaluan pengguna pertama yang anda masukkan
sebelum ini.
46 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Anda akan diberi kebenaran untuk akses action add blog. Untuk logout dari system, sila taip
http://localhost/blog/users/logout
Pada line 25 ada arahan untuk setkan nilai $loggedIn dengan nilai id pengguna yang telah login.
Untuk menguji samada $loggedIn berjaya di set di view, sila tambah arahan di line 24,
<? debug($loggedIn); ?>. Hasilnya seperti di bawah :
47 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
CakePHP akan memaparkan nilai 1, iaitu no rujukan id kepunyaan user yang sedang log in ke dalam
sistem.
Menggunakan variable $loggedIn di kesemua fail views, saya boleh menguji user dengan arahan
berikut :
Link
<a href=”index.php?nama=azril&umur=32&lokasi=Putrajaya”>Test
href=”index.php?nama=azril&umur=32&lokasi=Putrajaya”>Test hantar data </a>
http://localhost/index.php?nama=azril&umur=32&lokasi=Putrajaya
Seterusnya di dalam fail index.php anda akan gunakan kod berikut untuk mengambil data yang
dihantar
Di dalam CakePHP, untuk menghantar data, berbagai cara boleh digunakan mengikut lokasi
samaada dari controller ( redirect ) atau view.
Contoh Link
/blog/posts/testing/nama:azril/umur:32/lokasi:Putrajaya
51 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
Di dalam controller, cara-cara untuk akses data tersebut ialah mengunakan $this-
$this->params[‘named’]