Professional Documents
Culture Documents
com )
Email : azril.nazli@gmail.com
Facebook : http://facebook.com/azrilnazli
Versi: 0.06
Pembangunan laman web ialah satu kerja yang memerlukan anda tahu banyak
teknologi dan juga berbagai bahasa aturcara. Membangunkan laman web ialah satu
kerjaya yang menyeronokkan dan juga memberi pendapatan lumayan disebabkan
oleh permintaan tinggi dari sektor swasta dan juga awam tetapi dengan syarat anda
perlulah kemaskini pengetahuan dengan teknologi terkini.
Jelas di sini, tugas seorang pembangun laman web merangkumi banyak aspek.
Tidak terhad kepada aturcara semata-mata, seorang pembangun perlu mengetahui
selok belok server, pengetahuan asas tentang rangkaian dan juga web design.
Cabaran utama pembangun laman web semakin hari ialah untuk deliver hasil kerja
mereka dalam masa yang singkat dan mudah untuk diubahsuai mengikut kehendak
pelanggan. Contohnya jika pelanggan tiba-tiba ingin menambah feature seperti
search engine dan ianya perlu disiapkan dalam masa 1 jam.
Buku ini akan mengubah cara anda membina laman web. Secara tradisionalnya,
pembangun laman web yang menggunakan PHP dan MySQL akan membuat
sistem tanpa menggunakan framework. Memang benar, kelajuan aturcara anda
memang laju disebabkan anda tidak perlu mengikut undang-undang dalam
membina laman web. Anda boleh letak fail secara sesuka hati anda, membuat
panggilan database di setiap fail, malah anda tidak perlu risau dengan struktur
sistem anda. Tetapi, ianya akan menjadi masalah yang besar jika sistem anda perlu
dinaik taraf di kemudian hari dan ianya sudah tentu memerlukan ramai
pengaturcara untuk memahami cara anda membuat sistem. Lebih teruk lagi jika
sistem anda perlu dimigrate ke pengkalan data Oracle dari MySQL dan bayangkan
anda ada beribu-ribu fail yang memerlukan perubahan dan di ketika itu anda
mungkin rasa menyesal dan ingin berubah ke kerjaya yang tidak memeningkan
kepala anda.
CakePHP ialah satu framework yang cukup terkenal disamping Code Igniter,
Symfony Framework dan juga Zend Framework. Saya telah mencuba kesemua
framework di atas dan memilih CakePHP kerana sebab-sebab berikut:
Oh ya, saya lupa bercerita tentang Ruby On Rails atau RoR. Ianya mula popular
sekitar tahun 2006 disebabkan menggunakan konsep MVC ( Model View
Controller ) dan tujuan utama menggunakan RoR ialah untuk membuatkan
pembangun laman web gembira semasa membina sistem. ( sila google Ruby On
Rails )
Pengetahuan Asas
Buku ini ditujukan kepada semua orang dengan syarat anda mempunyai minat
untuk menjadi pembangun laman web. Ya, buku di tujukan untuk semua peringkat
masyarakat di luar sana dengan pengetahuan asas menggunakan komputer dan
internet. Sepantas harimau kumbang berlari, dia perlu belajar berjalan dahulu
sebelum belajar berlari. Tapi sebaiknya jika ada mempunyai asas-asas berikut
Sekarang adalah zaman Web 2.0 dan skill-skill baru yang akan dipelajari adalah
seperti berikut
1. HTML
2. CSS
3. Javascript
4. AJAX
5. PHP
6. Object Oriented Programming
7. SQL
8. SVN
Untuk mengetahui apa maksud akronim di atas, sila Google setiap perkataan dan
cuba cari maksudnya.
Sila download kesemua fail di atas dan simpan di dalam satu folder.
XAMPP ialah koleksi perisian asas untuk membolehkan saya menjalankan Apache
web server dan juga MySQL database server di dalam persekitaran sistem operasi
Windows. Secara amnya, Apache web server akan menggunakan port 80 di dalam
komputer kita dan MySQL akan menggunakan port 3306. Untuk memastikan web
server kepunyaan saya berjaya di install, saya cuma perlu buka alamat web
http://localhost:80 atau secara singkatnya http://localhost dan web server akan
memaparkan website. Disamping itu, XAMPP datang sekali dengan bahasa
perisian PHP yang akan digunakan oleh framework CakePHP di dalam projek blog
ini nanti.
Install XAMPP
Saya menggunakan XAMPP versi lite. Untuk install, sila ikuti cara-caranya di
http://www.apachefriends.org/en/xampp-windows.html . Untuk PATH
installation, saya gunakan c:\xampp. Setelah anda install xampp, klik ikon XAMPP
di Desktop anda dan jangan tick running sebagai service. Cuma start 2 service
sahaja, iaitu Apache dan MySQL. Klik menu start dan jika Windows Vista tanya
soalan untuk block/unblock service berikut, pilih unblock. Setelah anda berjaya
running 2 service itu ( Apache & MySQL ), gunakan Mozilla Firefox dan buka
alamat http://localhost atau http://127.0.0.1. Anda akan nampak XAMPP default
page seperti gambar rajah di bawah.
URL : http://www.cakephp.org
CakePHP ialah satu framework yang menggunakan PHP sebagai bahasa aturcara
sokongan. Ia mengambil inspirasi Rapid Application Development yang
diperkenalkan older framework Ruby On Rails. CakePHP boleh dijalankan di
dalam persekitaran Windows, Linux,Freebsd dan Mac OS.
Model ialah gateway untuk akses data. Data boleh berbagai bentuk seperti fail
CSV, database, LDAP. Contoh fail untuk Post Model ialah
/app/models/model.php
Sesudah data dipanggil dari sumber, tugas Controller ialah untuk memanipulasi
data sebelum di hantar ke View. Di dalam Controller, saya boleh panggil data dari
berbagai sumber seperti User,Post,Comment dan kemudiannya digabungkan untuk
di hantar ke View. Contoh fail untuk Post Controller ialah
/app/controllers/posts_controller.php
View ialah tempat data dipersembahkan kepada client. Persembahan data boleh
berbagai bentuk seperti HTML,JSON,Javascript,XML malah text sahaja. View
ialah tempat di mana CakePHP berinteraksi dengan pengguna. Setiap action akan
mempunyai viewnya sendiri, contohnya Add Action, ianya merujuk kepada satu
method untuk Post Controller bernama Add dan akan mempunyai satu fail View
bernama /app/views/posts/add.ctp. Extension .ctp bermaksud Cake Template.
Sebelum itu, baik saya terangkan bagaimana struktur direktori sistem blog ini.
Sepertimana yang kita tahu, XAMPP akan diinstall di c:\xampp dan directory
c:\xampp\htdocs akan menyimpan kesemua fail-fail yang boleh diakses melalui
web server. Jika PC anda mempunyai alamat 10.0.0.1 dan anda berada di dalam
rangkaian, rakan anda boleh mengakses fail-fail dan direktory menerusi alamat
http://10.0.0.1 dengan syarat Apache web server sedang berjalan.
Jadi di dalam kes ini, saya akan download CakePHP 1.2.5 stable ( .zip ) dan extract
sebagai folder c:\xampp\htdocs\cake_projects\
Pilih cake_1.2.5.zip
Masuk ke dalam folder cake_1.2.5/ dan akan jumpa satu folder bernama
cake_1.2.5/ . Rename folder tersebut menjadi cake_projects. Copy/cut folder
tersebut ke dalam folder c:\xampp\htdocs
Konfigurasi CakePHP
Untuk memastikan anda berjaya install CakePHP dengan jayanya, sila buka alamat
http://localhost/cake_projects/ menggunakan Mozilla Firefox, dan anda akan dapat
melihat page seperti berikut :
MySQL database adalah pilihan utama di dalam projek ini. Untuk memanipulasi
pengkalan data MySQL, saya akan gunakan perisian PHPMyAdmin yang telah
datang sekali dengan XAMPP. Untuk akses ke PHPMyAdmin, sila ke alamat
berikut
- Username : root
- Password : < tiada password >
- Host : localhost
Seterusnya, cipta satu fail bernama cake.bat ( windows batch file) di lokasi
c:\xampp\htdocs\cake_projects\cake.bat . Sila tulis kod seperti di bawah.
Save fail tersebut dan kemudian buka terminal MS-DOS anda dan pergi ke folder
c:\xampp\htdocs\cake_projects\
Arahan : cd c:\xampp\htdocs\cake_projects
Sekarang, anda sudah boleh menggunakan cake CLI . Cuba taip arahan: cake dan
tekan [ENTER].
Paparan seperti di atas akan muncul. Saya ingin membina satu projek bernama
blog dan ianya akan disimpan dalam folder c:\xampp\htdocs\cake_projects\blog .
Sistem ini akan diakses melalui alamat http://localhost/cake_projects/blog
Jadi untuk membina projek bernama blog arahan berikut akan dilaksanakan
Kemudian paparan seperti di bawah akan ditunjukkan dan anda perlu isi lokasi
projek blog anda
Seterusnya anda akan ditanya 2 soalan. Sila tekan Y untuke kedua-dua soalan dan
cake CLI akan membina projek blog anda dan output seperti di bawah akan
dipaparkan
Kemudian cake CLI akan bertanya soalan tentang konfigurasi database. Kita akan
menggunakan objek default untuk menyimpan setting database. Sila ikut
konfigurasi seperti di atas. Tekan y jika anda bersetuju dengan konfigurasi yang
disediakan.
Paparan setelah berjaya membuat konfigurasi database untuk projek blog dengan
menggunakan cake CLI.
Ringkasan Bab 1
Dalam buku anda akan membina berbagai-bagai projek, tidak terhad hanya
membina blog sahaja. Contohnya anda membina sistem bernama Event, untuk
mengaksesnya hanya perlu membina projek di folder
c:\xampp\htdocs\cake_projects\ dan http://localhost/cake_projects/event
Jika anda melihat sistem blog seperti di blogspot atau wordpress, elemen utama
yang anda nampak ialah tajuk , isi, komen dan tarikh blog dicipta.
Tugas pertama kita ialah membina satu sistem di mana kita boleh:
Sistem Blog yang akan dibina, akan menggunakan database table bernama posts
yang akan dibina di dalam database blog_development. Table posts ini akan
mempunyai kolum seperti berikut:
Untuk membina table posts seperti di atas, saya akan menggunakan Cake Schema.
Buka editor Crimson Editor anda dan taip kod seperti di bawah
Sila pilih Y
Contoh SQL script yang dijana oleh arahan cake CLI. Untuk veteran SQL, anda
sudah tentu dapat membaca maksud kod SQL di atas. Jika dilaksanakan, satu table
bernama posts dengan field id,title,summary,content,updated,created dan
is_publish akan dibina di dalam database blog_development.
Tetapi command di atas tidak akan membina table bernama posts di dalam
database blog_development, anda perlu laksanakan arahan yang sama tetapi tanpa
flag --dry. Setelah anda berpuashati dengans struktur table posts, sila laksanakan
arahan berikut.
Arahan cake schema akan membina table bernama posts di dalam table
blog_development secara automatik.
Dengan mengunakan cake schema, saya dapat membina table secara automatik
tanpa perlu menaip arahan SQL di dalam perisian phpMyAdmin.
Seterusnya, kita akan membina antaramuka sementara untuk table posts. Ianya
akan dibina juga menggunakan cake bake cli. Antaramuka ini akan membolehkan
saya menguji sistem blog yang asas dengan feature seperti
- Masukkan post
- Senaraikan post
- Kemaskini post
- Padam post
CakePHP Model
Model di dalam CakePHP adalah sumber data, dalam kes ini table posts akan
diwakili oleh model bernama Post. Segala operasi untuk mengeluarkan dan
memasukkan data ke dalam table posts akan dilakukan oleh model bernama Post.
Untuk itu saya perlu bina model bernama Post sebagai /blog/models/post.php
1. Nama model mesti dimulakan dengan huruf besar seperti Post, User,
Location
2. Nama model mesti singular ( tanpa penambahan s ) dan bukannya plural
seperti Posts,Users
3. Nama model mesti dalam format CamelCase. Yakni dimulakan dengan
huruf besar dan diikuti dengan huruf kecil
4. Jika anda ingin menggunakan 2 patah perkataan sebagai mode, gunakan
CamelCase. Contohnya anda mempunyai table bernama user_settings, dan
ingin membina model untuk table tersebut. Nama model yang perlu anda
guna ialah UserSetting
5. Nama fail untuk Model mesti sama dengan nama model yang ditakrifkan di
dalam kod. Nama fail mestilah berhuruf kecil dan jika mempunyai 2
perkataan, mestilah dijarakkan dengan menggunakan underscore. Contohnya
nama fail untuk model UserSetting mestilah berbentuk user_setting.php
UserSetting ~ user_setting.php
Post ~ post.php
Location ~ location.php
6. Fail model perlu disimpan di dalam folder /blog/models/*
CakePHP Controller
Controller dalam CakePHP berfungsi untuk menerima data dari Post Model dan
data akan dimanipulasi di Controller sebelum di hantar ke View. Fungsi Scaffold
digunakan untuk melihat struktur table posts dengan menggunakan interface yang
digenerate oleh CakePHP. Untuk membina Post Controller, fail bernama
posts_controller.php perlu dicipta dan diletakkan di dalam folder /blog/controllers.
Seterusnya saya ingin menguji fungsi Scaffold. Oleh itu saya akan buka alamat
http://localhost/cake_projects/blog/posts
Seterusnya saya akan mencuba mengisi table posts dengan menggunakan interface
CRUD yang disediakan. Hasilnya seperti berikut.
Field id,created dan updated akan dimasukkan secara automatik oleh CakePHP.
Dengan menggunakan scaffold, kesemua fungsi seperti add,edit,delete akan
tersedia secara automatik.
Jika anda telah sampai peringkat ini, tahniah kerana berjaya mencipta sistem
lengkap CRUD pertama anda.
Maksud CRUD ?
Scaffold ialah satu fungsi di mana CakePHP akan membina interface untuk operasi
CRUD yang menggunakan table posts sebagai sumber data. Kegunaan Scaffold
ialah untuk melihat struktur table yang dibina menepati kehendak sistem.
Seterusnya kita akan membuat aplikasi kita yang pertama dengan ciri-ciri berikut
1. Sistem perlu mempunyai index dan view untuk senaraikan Posting dan
untuk paparkan Posting mengikut id
2. Perlu mempunyai mekanisma CRUD untuk admin
3. Setiap Posting perlu disenaraikan di hadapan , contohnya alamat
http://localhost/cake_projects/blog perlu memaparkan Posting terkini.
4. Posting di muka hadapan mesti menyenaraikan Posting terakhir dahulu
5. Hanya tajuk,tarikh dan ringkasan Posting sahaja di paparkan
6. Mesti ada link untuk membaca Posting yang lengkap.
7. Perlu ada link navigasi yang ringkas untuk panduan pembaca blog
8. Hanya paparkan Posting yang disahkan sahaja ( is_published = 1 )
9. Hanya paparkan 10 Posting dan selebihnya boleh disenaraikan
menggunakan Pagination.
Kehendak : Sistem perlu mempunyai index dan view untuk senaraikan Posting dan
untuk paparkan Posting mengikut id
Untuk memenuhi kehendak di atas, saya akan membina 2 action bernama index
dan view di dalam Post Controller ).
- Senaraikan posting mengikut format blog dan disusun mengikut tarikh. Blog
yang terakhir akan dipaparkan dahulu
- Hanya senaraikan Tajuk, Ringkasan,Tarikh sahaja
- Mempunyai Pautan untuk membaca blog dengan lengkap
- Mempunyai navigasi untuk membantu pembaca menggunakan blog
Tugasan : Senaraikan posting mengikut format blog dan disusun mengikut tarikh.
Blog yang terakhir akan dipaparkan dahulu.
Tambah method index() dari baris 12 hingga ke 16. Variable $posts akan mendapat
data dari arahan $this->Post->getLatestPost(). $this->Post merujuk kepada model
Post, yakni sumber data yang digunakan untuk mendapatkan maklumat dari table
posts. Method getLatestPost() pula merujuk kepada method yang kita bina sebelum
ini di dalam fail /blog/models/post.php.
Memperkenalkan debug();
Hasilnya adalah seperti di dalam screenshot di atas. Data disusun dalam bentuk
Array() yang ditentukan oleh CakePHP. Setiap gugusan data dikumpulkan
mengikut model, dalam kes ini Post. Jika saya ingin mengeluarkan title blog dari
variable $posts, saya akan melakukan arahan berikut
Echo $posts[0[‘Post’][‘title’]; /
Tetapi, saya akan menggunakan Foreach Loop untuk menyenaraikan kesemua data
posts. Contoh :
…kesemua data akan dipaparkan di sini menggunakan variable $key atau $value
Ok, bayangkan anda ingin mengumpulkan data seperti nama pelara dalam kelas di
dalam satu variable $nama, apa yang anda perlu buat ialah
<?php
$nama[] = ‘Ahmad’;
$nama[] = ‘Raju’;
$nama[] = ‘Ah Chong’;
?>
<?php
Foreach($nama as $key=>$value):
Endforeach;
?>
nama = Ahmad
nama = Raju
nama = Ah Chong
Berbalik semula ke sistem senarai blog, saya perlu daftarkan nilai variable $posts
dahulu di dalam index action sebelum ianya boleh digunakan di dalam View
index.ctp
Post Views
Views adalah tempat dimana persembahan data dilakukan, folder bernama posts
perlu dibina di dalam folder /blog/views/ . Kemudian saya akan save fail bernama
index.ctp di /blog/views/posts/index.ctp . Nama folder biasanya adalah plural
kepada nama model. Contohnya jika model Post, nama folder ialah views. Jika
nama model UserSetting, nama folder view ialah user_settings
Seterusnya buka fail baru di dalam Crimson Editor dan tulis kod seperti di bawah:
Jika anda perhatikan, di bawah page tersebut, debug arahan SQL dipaparkan. Ada
beberapa perkara lagi yang perlu dibetulkan dengan paparan index di atas.
CSS untuk DOM id navigation. Kod di atas ialah kod CSS ( Cascading Style
Sheets ) yang digunakan untuk mengawal warna,saiz,kedudukan panel navigasi
blog kita nanti.
Memperkenalkan LAYOUTS
Di dalam folder /blog/views/layout, ada terdapat satu fail bernama default.ctp. Fail
ini berfungsi sebagai placeholder untuk keseluruhan projek blog saya ini. Jika saya
melakukan perubahan di fail default.ctp, ianya akan diapply ke seluruh projek.
Refresh kembali action index anda, dan anda akan dapat paparan seperti di bawah
Tambah kod seperti di baris ke 11 dan save fail post.php. Cuba refresh semula
action index() dan kedudukan susunan akan berubah.
Title website adalah satu elemen penting dalam pembinaan blog, kerana jika
pembaca ingin Bookmark page disukai, Browser akan mengambil nilai tag title.
Contoh
<html>
<head>
<title>Senarai Posting</title>
</head>
Tag title di atas akan dibaca oleh browser dan juga search engine. Jadi adalah
penting untuk saya ubahsuai layout default.ctp seperti di bawah :
Secara automatik satu popup akan terbuka dan nilai Page Title berjaya dibawa
sebagai title.
Kehendak : Di dalam action index, hanya senarai ringkasan blog sahaja yang
dipaparkan. Bagaimana jika pembaca blog anda ingin membaca blog anda dengan
lebih lengkap ?
Penyelesaian : Bina satu action bernama view dan hanya menerima 1 argumen
sahaja, iaitu nilai $id. HTML link yang dijana di dalam index perlu membawa nilai
$id supaya CakePHP dapat retrieve data berdasarkan nilai $id yang diberi. Nilai
$id mesti dibawa menggunakan method http get. Contoh :
http://localhost/cake_projects/posts/view/13
Nilai 13 di atas adalah nilai $id yang dibawa menggunakan method http get.
Baris 18 hingga 21
Baris 24 hingga 34
Tambah function view() di bawah function index() dan sebelum penutup class.
Save action view di dalam fail /blog/controllers/posts_controller.php.
Baris 17 hingga 23
Perhatikan saya berjaya membuat link Read di sebelah kanan setiap Post. Jika saya
klik link tersebut, paparan berikut akan ditunjukkan,
Blog boleh dibaca dengan sepenuhnya. Perhatikan juga link navigation di atas dan
juga back link di bawah. Dengan design sebegini, pembaca blog saya boleh
menggunakan sistem navigasi untuk kemudahan mereka membaca blog.
Jika anda perhatikan kod untuk action view() dalam Post Controller,
Saya membuat checking untuk mengesan kehadiran nilai $id. Jika $id tidak wujud,
arahan redirect() akan dilaksanakan ke action index() dan disertakan dengan mesej.
Bagaimana pula jika pembaca menghantar $id yang tidak wujud di dalam
database ?. Untuk mengesan data yang tidak wujud, saya akan membuat code
seperti di bawah
Baris 28 hingga 34
Data yang tidak wujud akan memberikan nilai empty kepada variable $post. Jadi
saya Cuma perku periksa samaada nilai $post adalah empty, jika benar, redirect ke
index dan beri mesej ‘Post not exist’ kepada pembaca. Senario ini biasanya berlaku
jika search engine capture data yang lama dan pemilik blog telah padam daripada
database.
Pagination
Bagaimana jika Posting anda sudah terlalu banyak ? Gunakan Pagination Helper
untuk memudahkan pembaca blog membaca posting-posting lama anda. Saya akan
membuat blog pagination dengan 10 posting setiap page.
Baris 19 hingga 22
CakePHP mempunyai berbagai-bagai helper yang boleh kita guna untuk membantu
membuat coding dengan cepat dan kemas. Contohnya, saya ingin
Baris 10
Nilai var $helpers mesti dimulai dengan huruf besar dan diletakkan di dalam
format array();. Seterusnya ubahsuai fail Index View di /blog/views/posts/index.ctp
dan ubahsuai kod seperti di bawah :
Ba
ris 12,13 dah 15
Setakat ini, saya telah membuat 2 action, iaitu Index dan juga View. Untuk Add
( Tambah ) Post, saya akan gunakan admin routing dengan beranggapan hanya
admin sahaya yang boleh melakukan operasi add,edit dan juga delete. Jadi, untuk
manage blog, saya akan menggunakan URL seperti berikut :
http://localhost/cake_projects/blog/admin/posts/index ~ Index
http://localhost/cake_projects/blog/admin/posts/add ~ Add
http://localhost/cake_projects/blog/admin/posts/edit/12 ~ Edit
http://localhost/cake_projects/blog/admin/posts/delete/12 ~ Delete
Baris 67
Seterusnya, kita akan bina sistem index untuk menyenaraikan kesemua posting
blog kita. Kembali semua ke action admin_index()
Ubahsuai admin_index() action di dalam Post Controller seperti kod di atas. Untuk
limit anda boleh letak nilai selain dari 2 contohnya 10.
Elements
Element di dalam CakePHP ialah satu fail yang diguna berulangkali. Dalam kes
ini, kod HTML/PHP untuk Pagination akan digunakan banyak kali di dalam
sistem. Oleh itu saya akan mencipta satu fail bernama paging.ctp di dalam folder
/blog/views/elements/ .
Untuk memanggil fail paging.ctp di dalam admin_index.ctp, saya akan buat kod
seperti di bawah
CakePHP akan secara automatik mencari fail bernama paging.ctp di dalam folder
tersebut. Seterusnya, ubahsuai fail admin_index.ctp seperti kod di bawah :
Sekarang, anda telah mempunyai antara muka admin index. Antara muka ini khas
untuk admin mengawal Posting blog anda seperti tambah,edit dan juga padam
Post. Jika anda perhatikan, link untuk Edit dan Delete, mempunyai flag admin =>
true. Kod ini bermaksud untuk mengarahkan CakePHP supaya menghasilkan link
seperti
http://localhost/cake_projects/blog/admin/posts/edit/1
http://localhost/cake_projects/blog/admin/posts/delete/1
http://localhost/cake_projects/blog/posts/view/1
Dengan cara ini, saya boleh membuat pemeriksaan, hanya usergroup admin sahaja
yang boleh mengakses fungsi tambah,padam dan edit di dalam sistem.
Action Add
Untuk menambah Posting ke dalam sistem, saya perlukan satu action yang akan
menerima data dari HTML Form dan akan melakukan proses validation sebelum
data boleh dimasukkan ke dalam database dan memberi mesej error jika ada
masalah. Saya akan bina skeleton untuk action dan view untuk add
Seterusnya ubah Post Controller anda dan tambah kod berikut di dalam action
admin_add()
Anda akan dipaparkan nilai yang dihantar oleh action Add dengan menggunakan
fungsi debug($this->data) di dalam action Add()
Form Data di dalam CakePHP di hantar dalam bentuk Array(), dan Model akan
menjadi kepala setiap array. Dalam kes di atas, yang menentukan Post adalah
kepala array ialah di dalam kod cipta form header, $form->create(‘Post’). Data
yang terdapat di dalam array pula disusun mengikut pasangan key dan value, Nilai
key adalah berdasarkan nama table field sepertimana yang terdapat di dalam
database. Data yang dihantar oleh Form, disimpan di dalam satu array value
bernama $this->data. Jadi, saya boleh anggap variable $this->data ialah satu
array() yang sepatutnya penuh dengan data. Dan saya boleh membuat checking
dengan kod if(!empty($this->data)) untuk memastikan variable $this->data
dipenuhi dengan nilai yang sepatutnya.
Form Helper
Rujukan : http://book.cakephp.org/view/182/Form
CakePHP secara automatik dapat mengesan jenis Form Field yang dikeluarkan
berdasarkan jenis field di dalam table. ( Convention over Configuration )
Tetapi ada ketikanya anda ingin membina Form dengan setting anda sendiri seperti
Ingin bina form header dengan method = get dan action ke /users/info
Sila cuba setiap Form Helper method yang disediakan oleh CakePHP. Contoh di
bawah ialah saya ingin membina dropdown menu menggunakan data yang saya
bina sendiri.
Untuk save data yang dihantar dari CakePHP Form Helper, arahan berikut akan
dilaksanakan jika controller berjaya detect kehadiran variable $this->data ,
contohnya
Post Model akan digunakan untuk melakukan operasi ini dan ianya akan di panggil
di dalam Post Controller. Kod $this->Post bermaksud, menggunakan objek Post
Model. Seterusnya, saya akan mengubah admin_add() action supaya data berjaya
disimpan di dalam database.
Baris 65 - 70
Ubahsuai action admin_add() untuk menambah fungsi save. Jika berjaya save, bagi
mesej ‘Post successfully added’ dan redirect ke action index(). Seterusnya cuba
anda klik link Add New Post di index ( di dalam Mozilla ) dan tambah data dengan
klik submit.
Contoh paparan jika anda berjaya hantar new Posting. Dengan hanya beberapa step
sahaja, anda sudah berjaya membuat sistem untuk menambah data ke dalam
database.
Form Validation
Rujukan : http://book.cakephp.org/view/125/Data-Validation
Form Validation ialah satu mekanisme di mana saya perlu menapis dahulu input
dari user sebelum data di simpan di dalam database. Untuk membuat form
validation di dalam sistem blog, saya perlu meletakkan rules di dalam fail
/blog/models/post.php .
Buat masa ini saya hanya mempunyai 1 rule sahaja untuk setiap field di dalam
table posts, iaitu data untuk title,summary dan content tidak boleh kosong
( empty ).
Baris 13 - 18
Skrg, cuba anda hantar Post tanpa mengisi apa-apa nilai di dalam form field.
CakePHP akan memaparkan error untuk setiap field.
Edit Post
Seterusnya, saya akan membuat mekanisme untuk edit Post. Secara amnya,
pemilik blog akan buka paparan admin_index() dan akan klik link Edit di sebelah
kanan setiap row untuk Post. Link Edit tersebut sepatutnya membawa nilai $id
seperti di bawah
http://localhost/cake_projects/blog/posts/edit/12
Link di atas bermaksud, saya ingin edit Post yang menggunakan $id = 12. Action
admin_edit() perlu menerima nilai $id tersebut supaya boleh digunakan di dalam
action untuk manipulasi data Post = 12.
Nilai $id telah diassign semasa di dalam Foreach Loop. Setkan ‘admin’ => ‘true’
untuk memberitahu CakePHP anda berada dalam mode Admin.
Kemudian, edit Post Controller anda dan tambah action admin_edit() seperti
berikut
Penerangan
Barus 79 hingga 87 adalah kod untuk kemaskinikan data di dalam table posts.
Form data akan dihantar menggunakan variable $this->data dan di dalamnnya
terkandung nilai id Post yang ingin dikemaskini. Arahan $this->Post->save($this-
>data) akan kemaskinikan data yang dihantar terus ke dalam table posts.
Baris 91 pula ialah kod yang mengeluarkan data Post berdasarkan nilai $id yang
diberi. $this->Post->read(null,$id) akan mengambil nilai Post berdasarkan $id di
dalam table posts, dan akan diberi kepada variable $this->data. Seterusnya Form
Helper akan menggunakan niali di dalam variable $this->data untuk keluarkan data
di dalam Edit Form.
database. Seterusnya, cuba anda edit mana-mana Post di dalam senarai index, dan
anda akan dipaparkan dengan interface seperti berikut :
Latihan :
Saya ingin mengubah default page ke Controller : posts Action : index. Untuk itu
saya akan mengubah fail Route, /blog/config/routes.php
Sistem Administration
Buat masa ini ,untuk akses ke sistem Admin, saya akan menggunakan alamat
http://localhost/cake_projects/blog/admin/posts.
1. Blog Authentication ( Admin perlu login dahulu sebelum boleh akses modul
Admin )
2. Search Engine untuk carian Post
3. Tingkatkan sekuriti Form menggunakan Sanitize
4. Update status menggunakan Ajax
5. Sistem Komen.
6. User registration & User management
7. Sistem Attachment untuk gambar-gambar
8. Gabungkan TinyMCE HTML Editor
9. Sistem RSS ( Really Simple Syndication )
Jadi untuk itu, saya akan membuat Helpers bernama Sidebar. Untuk memastikan
Helper Sidebar sentiasa dipanggil, saya akan membuat satu master controller yang
di panggil AppController. Fail ini membolehkan arahan dilakukan secara global.
Contohnya jika anda ingin membuat statistik pelawat, anda boleh meletakkan kod
tersebut di AppController tanpa mengulangnya di setiap Controller yang ada dalam
sistem anda. AppController ini telah dibina secara default oleh CakePHP dan
lokasinya terletak di /blog/app_controller.php.
Saya cuma ingin mendapatkan 10 posting terakhir sahaja. Jadi fungsi $this->Post-
>getLatestPost() di dalam Post Model perlu diubah supaya menerima variable
$limit. Variable $limit ini yang menentukan jumlah data yang akan ditarik dari
database.
Kali ini saya telah mengubahsuai panggilan $this->find dengan meletak argumen
$options. Variable $options ialah array yang menyimpan settings supaya CakePHP
boleh mencipta script SQL yang sesuai untuk memanggil hanya 10 data sahaja dari
table posts dan Cuma field id,title dan created sahaja yang direturn.
beforeRender() ialah satu ciri CakePHP yang amat penting. Saya memanggil
fungsi beforeRender() selepas logik di dalam Controller di jalankan dan sebelum
CakePHP memaparkan View. Di antara fasa tersebut, saya menyuruh
AppController untuk dapatkan 10 Posting terakhir dan didaftarkan ke dalam View
menggunakan variable $latest_posts. Dengan cara ini, saya boleh menggunakan
variable $latest_posts untuk di gunakan di dalam Helper Sidebar.
Perlu diingatkan, selepas bari ke 15, jangan ada whitespace yang terhasil. Untuk
untuk, anda tidak perlu tutup kod php dengan tanda ?> seperti kebiasaan untuk
mengelakkan masalah whitespace.
Hanya perlu ubah kod di dalam DIV = content. Baris ke 68 adalah penggilan
Helper Sidebar untuk hasilkan kod yang memaparkan 10 posting terakhir di dalam
aplikasi blog. Save fail default.ctp dan buka alamat
http://localhost/cake_projects/blog
Authentication
Kini tiba masanya saya ingin membuat sistem Auth di mana hanya admin sahaja
yang boleh akses untuk manage blog admin. Untuk itu, saya perlukan table
bernama users dicipta di dalam database blog_development. Buka kembalik fail
Blog Schema yang terletak di /blog/config/sql/blog.php dan tambah kod untuk
table users :
Baris 21 – 35. Untuk mencipta table users menggunakan Cake Schema Console,
sila buka konsol MS-DOS dan pergi ke folder c:\xampp\htdocs\cake_projects\blog
Seterusnya saya hanya ingin mencipta table users sahaja. Untuk itu jalankan arahan
berikut di dalam MS – DOS
cake schema run create blog users bermaksud CakeSchema akan create table
bernama users di dalam skema blog.
Saya secara tidak sengaja telah meletak length untuk field password = 10.
Sepatutnya ialah 255 disebabkan komponen Auth akan seara automatik hashedkan
password yang dihantar dan ianya memerlukan 64 aksara . Jadi saya perlu ubah fail
skema blog dan perlu update table users.
Table users sudah dicipta. Seterusnya saya perlu bina Model, Views dan Controller
untuk User. Disebabkan saya cukup malas untuk taip satu-persatu kod untuk
Model,View dan Controller, saya akan gunakan cake bake CLI untuk membuat
fail-fail tersebut secara automatik.
CakePHP akan mencipta fail skeleton untuk CRUD ( index,view,add dan edit ) di
dalam /blog/views/user/*
Auth Component
URL : http://www.littlehart.net/atthekeyboard/2007/09/11/a-hopefully-useful-
tutorial-for-using-cakephps-auth-component/
Klik button submit. Sila tick checkbox Is Admin. Kemudian buat satu lagi user,
tetapi jangan tick checkbox is_admin. Jadi anda akan mempunyai 2 user,iaitu
admin dan bukan admin.
Jika Auth Component berfungsi dengan betul, nilai Password untuk User anda
sepatutnya berbentuk hashed seperti di atas.
Untuk action login dan admin_login, saya perlukan View login.ctp dicipta di dalam
folder /blog/views/user/login.ctp
Kemudian saya akan allow action Post Index dan Post View. Ini bermaksud,
pembaca tidak perlu login untuk akses action index() dan view() di dalam Post
Controller. Tambah method beforeFilter dalam Post Controller (
/blog/controllers/posts_controller.php )
Kalau anda masih ingat, di dalam AppController, saya telah menambah kod
Baris 64.
Baris 24 /views/layouts/default.ctp
Jadi saya boleh membuat menu yang ringkas untuk Admin di dalam Helper
Sidebar. Edit fail /blog/views/helpers/sidebar.php dan tambah 2 method berikut :
Method admin_login() untuk cipta link login ke Admin Post dan method admin()
untuk senaraikan modul-modul untuk Admin.
Sekarang, mari kita uji sistem Auth. Sila buka browser ke alamat
http://localhost/cake_projects/blog
Anda akan nampak link Administration di sidebar belah kanan, klik link tersebut
dan paparan login akan dipaparkan. Cuba login sebagai user yang mempunyai
akses admin.
Secara automatik, CakePHP Auth akan redirect anda ke muka hadapan blog dan
cuba klik menu Manage Post di sebelah kanan.
Paparan admin_index untuk Post. Kemudian cuba klik link Logout dan cuba login
sebagai user yang tidak mempunyai akses admin.
Jika anda malas untuk menaip semula kesemua Controller Action untuk CRUD
dan view, anda boleh menggunakan satu ciri $scaffold untuk Admin. Sila buka
User Controller dan update menjadi kod berikut
Componen Auth di dalam CakePHP akan mengambil apa sahaja nilai termasuk
whitespace ( blank ) dan akan convert ke format hashed password jika ia detect
field bernama ‘password’ digunakan. Bayangkan admin Cuma ingin mengubah
data email , tetapi bila admin submit data, CakePHP akan mengambil nilai
whitespace / blank dan terus hashed kan data untuk password dan save ke dalam
database. Seterusnya, user tersebut tidak dapat login kerana hashed password
sudah bertukar. Untuk mengatasi masalah ini, saya menggunakan custom field
yang bernama change_password. Dalam callback beforeFilter(), saya akan
membuat checking samaada data change password wujud atau tidak. Jika wujud,
assignkan $this->data[‘User’][‘password’] kepada nilai change_password dan
secara automatik CakePHP akan mengubah password tersebut di dalam database.
Kemudian update fail Sidebar Helper untuk letak link Manage User
Buka semua aplikasi blog di dalam Firefox , dan klik menu Manage User di
sebelah kanan, paparan berikut akan terhasil
Dengan masa tidak sampai 5 minit, anda telah berjaya membuat Admin Modul
untuk Model User . Module ini menggunakan $scaffold yang telah dicustomkan.
Cuba klik Edit salah satu user,
Kelihatan field bernama Change Password. Cuba anda ubah password ke nilai
yang baru. Kemudian logout, setelah itu login kembali menggunakan password
yang baru diubah.
Callback AfterFind
Bagaimana jika saya tidak suka format date Created dalam Scaffold ? Dan saya
ingin dalam format TimeAgoInWords() ? Untuk mengubah data yang telah ditarik
dari dalam database, saya akan menggunakan callback AfterFind() di dalam User
Model. Buka fail /blog/models/user.php dan tambah kod berikut :
Refresh semua paparan Manage User dan format Created telah berubah. AfterFind
sangat berguna jika anda ingin mengubah data yang dikeluarkan dari database
seperti untuk kegunaan drop down menu.
Model Relation
url : http://book.cakephp.org/view/79/Relationship-Types
Dalam CakePHP, table join dipersembahkan dalam bentuk Model Relation seperti
Konsep blog yang saya bina ialah setiap User akan mempunyai Post mereka
sendiri. Jadi relationship yang ingin saya bina ialah berupa :
Disebabkan setiap Post dimiliki oleh seorang User, di dalam table posts saya perlu
menambah kolum bernama user_id ( integer ). Untuk itu saya perlu ubahsuai fail
/blog/config/sql/schema/blog.php dan menambah field user_id
Ubah baris 12
Jalankan arahan Cake Schema : cake schema run update blog posts
Tambah baris 71
Tambah baris 88
Variable $this->data[‘Post’][‘user_id’] akan diberi nilai $id user yang sedang login
dengan menggunakan panggilan $this->Auth->user(‘id’);
Seterusnya, edit Post terkini atau tambah Post baru menggunakan fungsi admin
Manage Post. Pastikan nilai user_id diisi secara automatik dengan melihat data di
dalam phpMyAdmin
Baris 13. Cuba debug() nilai $value di baris 9. Anda akan lihat CakePHP akan
return data User yang memiliki Post tersebut.
Buka semula aplikasi blog anda dan hasilnya adalah seperti berikut :
Ralat
Laksanakan arahan : cake schema run update blog posts. Cuba tambah Post lihat
kembali format data di browser.
Sekarang format Date untuk Created telah berjaya dipaparkan dengan betul.
Latihan
1. Gunakan field Updated untuk paparkan bilakah Post tersebut kali terakhir
dikemaskini.
2. Paparkan nama User di dalam admin_index Manage Post
3. Hanya paparkan Post dengan kondisi is_published = 1 di dalam index
Bina function search() di dalam Post Controller. Sila baca komen untuk
penerangan.
Screenshot di atas adalah bila saya cuba mencari Post dari pada User bernama
‘bazet’
Melihat SQL yang dijana oleh CakePHP, ia berjaya fetch 5 row data yang
berkaitan dengan search term di atas.
Seterusnya saya ingin membuat search field di dalam Helper Sidebar. Oleh itu saya
akan menambah Helper Form di dalam fail /blog/views/helpers/sidebar.php seperti
berikut :
Kemudian, saya akan bina method bernama search() supaya ianya boleh digunakan
di dalam Default Layout untuk generate Search Form :
Refresh kembali aplikasi Blog anda dan sistem carian telah terpapar di sebelah atas
kanan sidebar. Cuba buat carian dan tekan [ENTER]
Ianya nampak kompleks kerana kriteria saya ialah mencari keyword match di
setiap field yang terlibat di dalam table Posts dan Users.
Kod di baris 64,65 dan 66 ialah value assignment berdasarkan data yang dihantar
oleh Search Form sesudah user menekan button Search.
Action Search adalah fungsi untuk Public User dan tidak perlu Login ke dalam
sistem untuk menggunakannya. Jadi sila allow action Search dalam Post Controller
beforeFilter.
Menggunakan $postConditions
url : http://code.hexflux.com/2009/06/easier-searchfiltering-with-
controllerpostconditions/
Seterusnya saya ingin membuat Admin Search. Fungsinya untuk membuat simple
Search Filter untuk Admin Post. Sayacuma ingin membuat Post Filter dengan
menggunakan 2 fields sahaja iaitu Post.title dan Post.summary. Buka fail Post
Controller, dah tambah kod berikut
Latihan :
CakePHP mempunyai Ajax dan Javascript Helper. Jadi untuk menulis kod untuk
Ajax, saya boleh menggunakan Helper tersebut. Cake 1.2.5 menggunakan Ajax
Prototype dan ScriptAculoUs. Untuk menggunakan Ajax, sila download
prototype.js dari website http://prototypejs.org/download dahulu dan save
sebagai /blog/webroot/js/prototype.js.
Baris 4 : /blog/app_controller.php
Baris 35
Saya akan bina table comments menggunakan Cake Bake CLI script.
di dalam Controller sebelum save untuk rujukan Post yang mana satu komen ini
ditujukan.
Untuk menghantar komen, pembaca perlu klik Post View dahulu dan di bawah
setiap Post akan ada ruangan untuk menambah komen. Saya akan menggunakan
teknologi Ajax untuk user menghantar komen.
Saya menggunakan magic find di baris 21, findAllByPostId. Nilai $post_id datang
dari hidden form field. Method Comment->findAllByPostId akan mencari
kesemua komen yang mempunyai nilai post_id yang sama dan seterusnya akan
didaftar ke View sebagai $comments. Jika ada form error, baris 25 – 28 akan
/blog/views/comments/add_success.ctp
Baris 3 ialah arahan Ajax Prototype untuk sembunyikan Reply Form setelah
komen berjaya ditambah. Array $comments datang dari action add() sekiranya
berjaya save $this->data . Di baris 6 .Saya menggunakan Element .CakePHP akan
mencari fail /blog/views/element/comment.ctp dan passing variable $comment di
dalammnya.
blog/views/comments/add_failure.ctp
Kalau tidak berjaya save, ada kemungkinan User tidak memasukkan field dengan
betul. Baris 4 hingga 8 akan loopkan kesemua error. Baris 6 ialah fungsi CakePHP
Saya menggunakan Element kerana fail yang sama akan digunakan oleh Post
View method dan juga Comment Add method. Untuk mengurangkan pengulangan
kod, saya akan gunakan elemen. Di bawah ini adalah Elemen untuk paparkan
komen.
/blog/views/elements/comment.ctp
Saya menggunakan banyak inline CSS untuk mendapatkan view seperti di bawah.
Kemudian, cipta fail Element untuk reply.ctp di dalam folder yang sama. Elemen
ini akan memaparkan HTML Form untuk User hantar komen untuk setiap Post.
/blog/view/elements/reply.ctp
Akhir sekali sudah tiba masanya saya ubahsuai kod untuk Post View di
/blog/views/posts/view.ctp
/blog/views/posts/view.ctp
Letak kod di atas selepas fieldset yang paparkan kandungan Post dan sebelum
Back Link.
Ubahsuai Post Controller untuk dapatkan nilai $comments untuk Post tersebut.
Baris 79 – 81 , /blog/controllers/posts_controller.php
Mari kita uji sistem Ajax Comment. Buka aplikasi Blog anda dan View salah satu
Post anda.
Reply Form akan terpapar di bawah maklumat Post. Cuba anda klik button Add
Comment tanpa mengisi apa-apa data.
Loader indicator akan berfungsi setelah anda klik butang Add Comment.
Komen akan terus dipaparkan dan mesej turut diberikan. Saya juga sembunyikan
Form Reply jika komen berjaya dihantar.
Saya ingin mendapatkan jumlah Comment untuk setiap Post di dalam Blog. Untuk
itu , saya akan gunakan khidmat Afterfind Callback di dalam Post Model. Tambah
kod berikut di dalam Post Model,
Saya juga perlu membuat Plural Helper untuk menentukan ayat comment perlu
plural atau singular berdasarkan jumlah Comment.
Ubah Post Index dan Post View untuk masukkan nilai jumlah Comment
Seterusnya, saya akan membuat method di dalam Sidebar Helper untuk paparkan
10 komen terakhir.
/blog/views/helpers/sidebar.php
/blog/models/comment.ctp
Refresh aplikasi blog anda dan di sebelah kanan akan terpapar senarai Comment
terkini.
Link setiap Latest Comments akan pergi ke Post View berdasarkan $id Post.
Untuk Admin Comment pula, saya akan menggunakan $scaffold = ‘admin’ seperti
yang dilakukan kepada Controller User. Untuk itu, tambah kod beforeRender() di
dalam Comment Controller di /blog/controllers/comments_controller.php
/blog/controllers/comments_controller.php
Saya ingin senaraikan Comment terkini dahulu, jadi saya akan tambah var $order
di dalam Comment Model seperti berikut :
Baris 4, /blog/models/comment.php
Dan akhir sekali, saya perlu menambah link ke Manage Comment di Helper
Sidebar
Dengan adanya Admin untuk Comment, anda boleh moderate komen-komen yang
datang dari User.
URL : http://book.cakephp.org/view/153/Data-Sanitization
Saya akan gunakan Sanitize Helper untuk menapis data-data yang diterima dari
User melalui sistem Comment
Bayangkan User anda cuba memasukkan kod Javascript di dalam ruangan Content.
Jika sistem Blog saya tidak menapis kod HTML tersebut,Popup Javascript akan
execute dan menganggu sistem Blog.
Untuk itu, saya akan gunakan Sanitize. Import Sanitize sebelum class
CommentController, seperti berikut
Kemudian, untuk menapis kesemua data dari $this->data, letak kod seperti berikut,
Naris 30 akan menapis kesemua data dari HTML Form. Hasilnya,di dalam sistem,
kod Javascript di atas akan berupa seperti berikut :
Jika anda tidak mahu menggunakan sanitize, anda boleh juga gunakan fungsi h()
seperti
Saya menggunakan Streamyx semasa membuat tutorial blog ini dan saya ingin
menguji sistem penghantaran Email dari dalam aplikasi Blog. Untuk itu, saya akan
gunakan Email Component di dalam Comment Controller,
Baris 7 , /blog/ontrollers/comments_controller.php
Setelah itu, saya akan bina satu action bernama admin_email() di dalam Comment
Controller
Setelah itu, saya kan ubahsuai action add() supaya menghantar Email kepada saya
jika ada Comment baru.
Kemudian, saya akan menguji dengan menghantar satu komen di dalam blog.
Bab ini hanya sesuai untuk System Administrator dan juga performance
tuner
Action scaling adalah untuk menguji prestasi CakePHP untuk mengeluarkan data.
Untuk itu bina satu action bernama scaling dalam Post Controller. Pastikan method
scaling diletak dalam senarau Auth Allow di baris 18.
Anda akan nampak debug yang mengatakan 3 SQL query akan dilaksanakan dan
mengambil masa 55 milisaat. Arahan DESCRIBE hanya dilaksanakan jika
aplikasi CakePHP dijalankan dalam mode DEBUG = 1,2 atau 3. Jika DEBUG di
setkan sebagai 0, ianya bermaksud untuk Production dan arahan Describe tidak
akan dilaksanakan.
Apache Bench
URL ; http://www.petefreitag.com/item/689.cfm
Hasil di atas menunjukkan 98 failed request untuk 1 user membuat 100 request. Ini
bermaksud server tidak dapat menampung request dari user.
Page yang akan saya bandingkan ialah fresh CAKEPHP 1.2.5 installation
Ujian pertama : running 1 user selama 1 minit ( 60 secs ) di dalam Windows Vista
Windows Vista XAMPP dapat membuat 11,574 request dengan kelajuan 192.9
request sesaat.
Linux CENTos 5.4 LAMP dapat membuat 50,000 request dengan kelajuan
5718.31 request sesaat.
Hasil ujian
Jelas di sini, prestasi server menjadi peranan penting dalam menentukan aplikasi
boleh scaling atau tidak. Deploy aplikasi yang mempunyai high traffic users
sepatutnya di server Linux.
Bayangkan jika SQL yang tidak perlu dilaksanakan dalam aplikasi, ia akan
menyebabkan server mempunyai burden yang lebih. Untuk itu, kita kembali ke
fungsi Post Scaling yang kita bina sebentar tadi
Buka http://localhost/cake_projects/blog/posts/scaling
Hasil carian di browser akan cuma return objek Post sahaja tanpa Comment.
Query dikurangkan dan masa diambil hanya 12ms dari 66ms sebelum Cache
diaktifkan. Seterusnya buat AB test dengan parameter 10 concunrrent user
Saya berjaya menaikkan request ke 602 dari 543 setelah cache dihidupkan.
Seterusnya saya akan hantar nilai $posts dari Action ke View. Cipta 2 fail berikut
- /blog/views/elements/scaling.ctp
- /blog/views/posts/scaling.ctp
Mari kita uji Action Scaling dengan 2 kondisi, cache => false dan cache=> true.
Hasilnya di browser adalah seperti berikut :
Element Caching amat penting untuk mengurangkan load masa yang diperlukan
untuk serve page tersebut.
Seterusnya saya akan membuat AB bench dengan nilai yang lebih besar
Model
Controller
Element
Hasil : 6506 requests untuk 100 user concurrency dalam masa 120 saat
Hasil : 6414 requests untuk 100 user concurrency dalam masa 120 saat
Ini bermaksud, jika Cache digunakan dengan betul, sistem anda dapat melayan 92
request lagi. Tetapi ujian ini dilakukan di dalam mesin laptop Windows dan result
mungkin berbeza. Untuk meningkatkan lagi prestasi aplikasi blog, anda juga perlu
tahu ilmu berikut
Untuk mengecilkan lagi saiz setiap page di dalam aplikasi Blog, buka App
Controller dan tambah kod berikut sebelum permulaan Class
Baris 1 – 9, /blog/app_controller.php
Hasilnya 1.56 KB sahaja, dan 75% saiz dapat dikecilkan dan data dapat disalurkan
75% lagi cepat.