You are on page 1of 51

Azril

Nazli
Alias
Bina Blog Guna CakePHP ver 1.0
rev 1 ( 26/07/2009 )

CEA Resources SDN BHD


azril.nazli@gmail.com
CakePHP Trainer
019 371 84 62
2 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 )

Membina Blog menggunakan CakePHP


Ciri-
Ciri-ciri Blog
Sistem blog membolehkan pemilik blog menulis blog dan pembaca boleh memberi komen kepada
blog yang ditulis. Blog yang ditulis disusun mengikut tarikh di mana blog yang terkini akan
dipaparkan dahulu.

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.

Hanya pemilik blog boleh akses untuk pengurusan seperti :

i) Tambah posting blog


ii) Edit posting yang sedia ada
iii) Padam posting yang sedia ada
iv) Padam komen – komen yang tidak diingini

Struktur Database Blog


Untuk permulaan, kita perlu bina 2 table menggunakan phpMyAdmin iaitu posts dan comments

Table posts :

- id ~ int(11) auto_increment , primary key | sebagai nombor rujukan


- title ~ varchar(255) | tajuk blog
- summary ~ text | menyimpan ringkasan blog
- content ~ text | menyimpan isi penuh blog
- publish ~ tinyint(1) | flag untuk siarkan blog atau sembunyi
- created ~ datetime | tarikh blog disimpan
- modified ~ datetime | tarikh blog diubahsuai
4 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Table comments :

- id ~ int(11) auto_increment , primary key | sebagai nombor rujukan


- post_id ~ int(11) | merujuk id posting komen ini ditujukan
- body ~ text | menyimpan komen
- poster_name ~ varchar(255) | menyimpan nama penghantar komen
- poster_email ~ varchar(255) | menyimpan email penghantar komen
- created ~ datetime | tarikh blog disimpan
- modified ~ datetime | tarikh blog diubahsuai

Sila ikut arahan di bawah


1. Muat turun Xampp Lite untuk Windows versi 1.7.1 dari
http://www.apachefriends.org/en/xampp-
http://www.apachefriends.org/en/xampp-windows.html
2. Install Xampp Lite di c:\
c:\xampp
3. Hidupkan pelayan MySQL dan Apache
4. Sila taip http://localhost untuk pastikan Xampp berjalan dengan sempurna
5. Sila ke http://localhost/phpMyAdmin
6. Bina dahulu database bernama blog_development
7. Bina table posts dan comments mengikut spefikasi di atas.
8. Muat turun CakePHP 1.2 Stable dari http://www.cakephp.org
http://www.cakephp.org
9. Unzip CakePHP 1.2 di dalam folder c:\xampp\htdocs
10. Rename folder cakephp menjadi blog
11. Buka alamat http://localhost/blog
12. Ubah fail blog/app/config/core.php dan ubah nilai security.salt ke nilai lain.
13. Ubah fail blog/app/config/database.php
blog/app/config/database.php supaya menggunakan blog_development sebagai
database dan root sebagai user dan tiada password.
14. Refresh kembali http://localhost/blog dan sepatutnya kesemua ralat telah diperbetulkan.
5 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Contoh CakePHP setelah berjaya dipasang .

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

- Model Name ~ Controller Name


- Comment ~ comments
- User ~ users
- Post ~ posts
- ImageGallery ~ image_galleries
- PhotoPage ~ photo_pages
6 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Model & Controller Post


Sila bina fail di bawah dan save sebagai blog/app/models/post.php . Nama model kebiasaannya
dalam bentuk singular.
singular

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

Untuk menamakan controller,


controller biasanya menggunakan plural form untuk nama model. Jika model
bernama post.php,
post.php controller akan dinamakan posts_controller.php

Seterusnya, kita perlu membina views untuk Post.


Post. Folder posts perlu dibina dalam
blog/app/views/posts . Folder views akan menyimpan fail-fail untuk setiap action di dalam
controller. Contohnya jika ada action bernama index di dalam controller,
controller fail bernama index.ctp perlu
dicipta di dalam folder views.
views Di dalam index.ctp terletaknya kod-kod html, css, javascript yang boleh
dicampurkan bersama dengan kod-kod php.
7 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

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 )

Struktur URL CakePHP


Di dalam CakePHP, struktur url adalah seperti berikut :

http : // {DOMAIN} / {APP} / {CONTROLLER} / {ACTION} / {PARAM1} / {PARAM2}

DOMAIN – alamat domain, contohnya localhost,


localhost google.com

APP – nama applikasi cakephp, contohnya blog

CONTROLLER – nama controller, contohnya Posts * mengikut nilai var $name yg disetkan di dalam
controller.

ACTION – nama action di dalam controller, contohnya index,add,edit,delete

PARAM 1 – variable tambahan contohnya nilai id yang ingin dibawa

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

Main Content Side Bar

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>

<li><a href="#">Option 1</a></li>


<li><a href="#">Option 2</a></li>
<li><a href="#">Option 3</a></li>
<li><a href="#">Option 4</a></li>
<li><a href="#">Option 5</a></li>

</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>

<li><a href="#">Link 1</a></li>

<li><a href="#">Link 2</a></li>

<li><a href="#">Link 3</a></li>

</ul>

</div>
<div id="footer"><p>Hakcipta Terpelihara</p></div>
</div>
</body>
</html>

Salin kod di atas sebagai blog/app/views/layouts/default.ctp


11 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
12 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )
13 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Salin kod di atas sebagai blog/webroot/css/blog.css


14 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Hasil gabungan default.ctp dan blog.css

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 )

Post Controller action index


Action untuk paparkan kesemua blog yang tulis akan dinamakan index . Dengan membuka alamat
http://localhost/blog/Posts/index, kesemua blog akan dipaparkan.

Bina fail controller bernama posts_controller.php di dalam folder blog/app/controllers/

Kemudian, bina satu fail bernama index.ctp di dalam folder blog/app/views/posts/index.ctp .

Setelah itu, cuba buka browser anda ke http://localhost/blog/posts/index

Menjadikan Posts sebagai muka hadapan system blog


Ubah fail blog/config/routes.php

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 )

Di dalam View CakePHP amalkan style programming seperti berikut :


- Untuk echo atau print variable, boleh gunakan <?= $var; ?> . Cara ini lebih pendek dari
<?php echo $var; ?>
- Untuk memudahkan blending antara kod HTML dan PHP, jangan gunakan bracers .
Sebaliknya gunakan contoh berikut

Contoh if else
<? If( $var == true ): ?>

….HTML Code…

<? Endif; ?>

Contoh Foreach Loop

<? Foreach( $posts as $post): ?>

…HTML code…

<? endForeach; ?>

Contoh For Loop

<? For( $i=0; $i<$j; $i++ ): ?>

...HTML code…

<? endFor; ?>

Contoh untuk While Loop

<? While($var == true): ?>

…HTML code…

<? endWhile; ?>

Contoh echo
echo variable di dalam HTML

Nama saya <?= $nama;?> dan umur saya <?=$umur; ?>

Untuk melihat kandungan variable

<? debug($variable); ?
17 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Apa yang berlaku ?

1. Di dalam controller index


function index(){
$posts = $this->Post->find(‘all’);
$this->set(compact(‘posts’));
}
Variable $posts telah diberi nilai dalam bentuk array oleh arahan
$this->Post->find(‘all’);

$this->Post->find(‘all’) bermaksud memilih data Model Post supaya melaksanakan arahan


find(‘all’) yakni membuat arahan mengeluarkan semua data dari table posts dan assign
sebagai array ke variable $posts

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 )

Contohnya seperti berikut

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

$variable[‘Model name’][‘field name’]


19 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Disebabkan kita menggunakan arahan $this-


$this->Post-
>Post->find(‘all’); nilai Array() yang diberi adalah
berbentuk 2 dimensi. Untuk membolehkan nilai $posts boleh digunakan di dalam index.ctp views,
arahan berikut perlu dilaksanakan :

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 )

Perhatikan bagaimana data dalam loop foreach dikeluarkan,

<?= $post['Post']['title']; ?>

juga sama dengan

<? echo $post['Post']['title']; ?>

atau

<? e($post['Post']['title']); ?>


20 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

$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’);

Jika anda ingin limitkan data sebanyak 10 row

$options = array(‘limit’ => 10);


$this->Post->find(‘all’, $options);

Jika ingin data limit 10 dan order by ID desc

$options = array(‘order’=> ‘Post.id DESC’ , ‘limit’ => 10);


$this->Post->find(‘all’, $options);

Jika ingin pilih data berdasarkan nilai $id

$options = array(‘conditions’=> array(‘Post.id’ => $id ));


$this->Post->find(‘all’, $options);

Atau lebih mudah

$this->Post->findbyId($id);

Jika ingin pilih data terakhir

$options = array(‘order’=> ‘Post.id DESC’);


$this->Post->find(‘first’, $options);
21 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Contoh paramater yang agak kompleks.


22 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

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

1. Membuat Form Validation di Model Post.


Post Field title, summary dan content mesti
dilengkapkan sebelum disimpan di dalam daytabase.
2. Membuat pautan dari index ke action add,
add untuk membolehkan kita menukar action. Fungsi
ini sama seperti membina pautan biasa.
3. Membina form untuk action add di dalam blog/app/views/posts/add.ctp
4. Membina add controller untuk memproses data form untuk action add.
add

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 )

Gambar di bawah menunjukkan kod untuk validation di blog/app/models/post.php

Sila salin kod di atas ke dalam fail blog/app/models/post.php


24 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Membina borang online ( form ) untuk action add


Kita telah menentukan untuk menggunakan action add atau http://localhost/blog/posts/add untuk
membolehkan kita menambah data ke dalam posts table

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

Di bawah adalah contoh lengkap add.ctp


25 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Membina controller untuk action add


Seterusnya, tambah function add di dalam Posts Controller ,
blog/app/controllers/posts_controller.php

Sila tambah function add() di dalam Posts Controller di dalam fail


blog/app/controllers/posts_controller.php

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 )

Menguji Action Add Posts Controller


Buka alamat http://localhost/blog/posts/add dan cuba hantar borang tersebut tanpa mengisi data.
Sepatutnya anda akan mendapat paparan seperi berikut :

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

Ringkasan Blog yang


baru di tambah

Nilai created dan


modified diisi secara
automatic oleh
Cakephp
28 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Membina action view untuk Posts


Kini ada telah berjaya menambah blog menggunakan action add dan kemudiannya dipaparkan oleh
action index. Seterusnya kita akan membuat action view, di mana pembaca perlu klik link blog yang
ingin mereka baca di action index. Setiap link akan membaca nilai id setiap blog. Nilai id ini
diperlohei dari field id di dalam table posts. Setiap blog akan diberikan id yang berbeza oleh MySQL (
fungsi auto_increment ). Jadi dengan menggunakan id sebagai nombor rujukan, kita dapat
mengeluarkan kesemua data yang dimiliki oleh id tersebut.

Ciri-ciri view yang kita kehendaki ialah seperti berikut

1. Setiap link akan membawa nilai id seperti berikut, http://localhost/blog/posts/view/12


2. Action view perlu membuat checking samaada id yang diberikan dalam bentuk integer dan
jika integer periksa samaada data ada di dalam database
3. Buat url supaya mesra search engine seperti http://localhost/blog/show/12/blog-pertama-
saya
29 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Bina Controller
Controller untuk View

Penerangan
Di line 27, controller view akan periksa kehadiran nilai id. Nilai $id dihantar menggunakan alamat
internet seperti

- http://localhost/blog/posts/view/1 ( nilai $id adalah 1 )


- http://localhost/blog/posts/view/2 ( nilai $id adalah 2 )

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 )

Bina view.ctp untuk Post

Tulis kod di atas dan simpan sebagai blog/app/views/posts/view.ctp


blog/app/views/posts/view.ctp.
/view.ctp. Untuk membolehkan kita
melihat kandungan penuh blog, satu pautan perlu dibina di dalam Loop dalam view index ( index.ctp
)

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>

Ubahsuai kod index.ctp untuk tambah link Baca Blog.


Blog ( sila lihat line 9 )
31 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

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 )

Bina system untuk kemaskini ( edit )


Tidak lengkap system jika tidak dapat mengubahsuai kandungan blog yang telah ditulis sebelum ini.
Ciri- cirri berikut perlu ada :

- Link untuk edit di view dan juga index


- Menggunakan action edit
- Menggunakan id yang dihantar menerusi URL
- Setelah berjaya edit, redirect semua ke view

Bina controller untuk


untuk edit
Cipta satu function bernama edit di dalam Posts Controller dan juga fail bernama edit.ctp di dalam
folder blog/app/views/posts.

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 )

Link Kemaskini Blog di index


index
Untuk memudahkan pemilik blog untuk mengemaskini blog, satu link kemaskini perlu dibuat di
dalam fail index.ctp . Sila ubahsuai kod di dalam loop foreach di dalam index.ctp seperti berikut

Tambahan di line 12.

Hasilnya

Link Kemaskini terpapar di sebelah kiri senarai blog


35 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

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 )

Bina system untuk padam blog


Setelah anda berjaya membuat system untuk senarai, tambah, kemaskini blog, kini tiba masa untuk
anda membuat system untuk memadam blog dari database.

Ciri-ciri

- Pemilik blog klik Padam di index


- Request padam akan dihantar ke controller delete beserta dengan id
- Jika berjaya padam hantar mesej flash Berjaya Dipadam dan sebaliknya
- Action delete tidak akan mempunyai view. Hanya action sahaja.
- Bila klik link Padam, mesti keluar dialog confirmation dahlia sebelum laksanakan arahan
padam.

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 :

Controller untuk delete di dalam Posts


Lokasi fail : /blog/app/controllers/posts_controller.php
37 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Perubahan di dalam index.ctp ( link Padam )


38 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

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

Tambah kod css di dalam blog/webroot/css/blog.css

Tambah kod css di atas ke dalam fail blog/webroot/css/blog.css


40 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

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

Tambah kod di atas di penghujung kod di dalam index.ctp


41 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Hasilnya

Hasil dari Pagination helper.


helper Anda boleh ubahsuai kod CSS untuk mengubah bagaimana paparan
Pagination dipersembahkan.
42 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Sistem Authentication untuk Blog


Rujukan : http://book.cakephp.org/view/172/Authentication

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

Bina table users dalam database


43 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Bina Model untuk table users

Bina fail app_controller.php

Untuk menambah user, sila ubah line 14 ke $this-


$this->Auth-
>Auth->allow('index','view', ‘add’); untuk
membolehkan action Add dapat diakses buat sementara. Setelah tambah user, buang semula
action add dari senarai allow.
44 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Bina Controller untuk User

Untuk menambah user, hidupkan sementara va4r $scaffold ( line 6 ). Setelah tamat menambah
user, sila nyah aktifkan line 6.

Bina View untuk login


45 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

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,

Menguji Authentication system


Sila buka alamat http://localhost/blog/posts/add

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

Tambah link logout dan paparkan username di menu utama


Jika anda lihat semula fail app_controller.php,

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.

Kita akan mengubah menu utama dengan criteria berikut :

Jika user belum login :

- Paparkan link untuk login


- Sembunyikan link untuk tambah,kemaskini dan padam

Jika user telah login

- Paparkan link untuk logout


- Paparkan link untuk tambah,kemaskini dan padam

Menggunakan variable $loggedIn di kesemua fail views, saya boleh menguji user dengan arahan
berikut :

Seterusnya, buka fail blog/app/views/layouts/default.ctp dan ubah seperti berikut :

Perubahan dari link 17 hingga 22


48 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Seterusnya ubah fail blog/app/views/posts/index.ctp untuk sembunyikan link Kemaskini dan


Padam

Paparan sebelum login


49 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Paparan Selepas Login


50 Bina Blog Guna CakePHP ver 1.0 rev 1 ( 26/07/2009 )

Hantar & Terima Data


Jika dalam PHP, anda akan gunakan format berikut untuk menghantar data :

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>

Akan menhantar data seperti berikut

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

Hasil akan berbentuk seperti

/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’]

Akan menghasilkan output seperti berikut

Seterusnya anda boleh passing data seperti berikut

You might also like