SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
 	
  
	
   	
  
Versi
CakePHP
2.* dan ke atas.
Tarikh modul
dicipta
12/12/2014
Versi modul 1.0
Email malikperang@gmail.com
H a k c i p t a 	
   T e r p e l i h a r a . F a r i z 	
   I z w a n 	
   B i n 	
   K a m a r u z z a m a n . 2 0 1 4 . 	
  
ASAS	
  CAKEPHP	
  MVC:	
  MEMBINA	
  
APLIKASI	
  WEB	
  (CRUD)	
  CAKEPHP	
  2.0.	
  
Fariz	
  Izwan	
  Kamaruzzaman	
  
	
  	
  
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
2	
  
Prakata
Assalamualaikum W.B.T dan Selamat Sejahtera pada pembaca modul panduan ini.
Saya amat bersyukur kerana dapat menyiapkan modul Asas CakePHP MVC:Membina Aplikasi
Web(CRUD) CakePHP 2 ini untuk latihan CakePHP yang saya kendalikan .
Dengan sebegitu banyak PHP Framework yang telah ada pada masa sekarang seperti
Zend,Laravel,Symfony dll,CakePHP juga tidak ketinggalan kehebatan dan kelebihannya untuk
bersaing bersama-sama PHP Framework yang lain.
Setiap Framework pasti ada kelebihan & kekurangan masing-masing.Apa yang penting adalah
keperluan terhadap sesuatu permintaan itu dapat ditunaikan mengikut spesifikasi dan had masa
yang ditetapkan atau dengan erti kata lain,sesuatu framework itu dapat menyelesaikan kerja
mengikut keperluan & had masa yang ditetapkan.
Saya berharap dengan modul panduan ini ,anda dapat memahami asas PHP MVC Framework &
CakePHP .
Jom buat Cake!
	
  
	
  
	
  
	
  
	
  
	
  
	
  
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
3	
  
Objektif & Keperluan
	
  
Objektif modul panduan ini adalah untuk memberi panduan kepada para pembangun PHP yang
baru bermula menggunakan CakePHP Framework untuk mebina sebuah aplikasi web yang
mempunyai fungsi Bina(Create),Baca(Read) Kemaskini(Update),Padam(Delete) atau dengan
perkataan pendek CRUD.
Modul panduan ini merangkumi:
1. Pengenalan ringkas CakePHP Framework.
1.1.Model
1.2.Controller
1.3.View.
2. Pemasangan CakePHP pada stesen kerja local (Local Workstation/Localhost).
2.1.Pemasangan di Windows
2.2.Pemasangan di Linux/*nix.
2.3.Pemasangan di OSX.
3. Pemasangan CakePHP Console & Shell.
3.1.Windows
3.2.Linux/*nix.
3.3.OSX.
4. Membina sebuah aplikasi CakePHP - Project Management System.
5. Menjana struktur aplikasi menggunakan Cake Bake Console.
5.1.CakePHP Skema & Model
5.2.Cara untuk membina skema pangkalan data menggunakan Cake Schema Console.
5.3.Penyambungan pangkalan data menggunakan Cake Bake Console (MYSQL & CakePHP
Connection).
6. Menjana kod sumber (Source Code) menggunakan Cake Bake Console.
6.1.Penerangan Interactive Bake Shell.
6.2.Menjana kod sumber untuk Model,View & Controller.
6.3.Route
7. Membina fungsi log masuk dan log keluar (Login & Logout with Simple Authentication
and Authorization Application)
7.1. Membuat Tetapan dan Kemaskini
7.2. Pengesahan Log Masuk & Log Keluar (Login & Logout Authentication)
7.3. Penggunaan fungsi beforeFilter.
7.4.Password Hashing.
7.5.Penapisan akses kandungan mengikut kategori pengguna sistem (Authorization).
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
4	
  
Keperluan
Untuk mengikuti panduan ini. Anda perlu mempunyai asas dan pengalaman dalam pembangunan
web seperti :
- Tahu membina modul Create Read Update Delete (CRUD) menggunakan PHP dan
MySQL
- Tahu mereka bentuk struktur dan skema pengkalan data (Databases) menggunakan SQL
(Modul ini menggunakan MYSQL).
- Mempunyai asas HTML,CSS,dan Javascript.
- Tahu menggunakan alat pengurusan pengkalan data(Database Administration Tools)
seperti PhpMyAdmin,Sequel Pro,dll.
- Sudah mempunyai HTTP server seperti Apache (Modul ini akan menggunakan Apache ).
- Sudah mempunyai SQL server seperti MYSQL (Modul ini menggunakan MYSQL).
- Mengetahui asas OOP (Object Oriented Programming).
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
5	
  
1.Pengenalan ringkas CakePHP Framework.
1.1 Model.
Fungsi model secara ringkas adalah komponen yang akan berinteraksi dengan pangkalan data.
Model ditugaskan untuk menerima,menghantar,dan memanipulasi bisnes data logik diantara
pangkalan data dan controller. Sebagai contoh,setiap SQL query yang dijalankan haruslah
diletakkan didalam model supaya informasi data dapat dikapsulkan dan disembunyikan(Data
encapsulation & information hiding).
1.2 Controller.
Fungsi controller secara ringkas adalah komponen untuk mengawal permintaan dan perjalanan
sesuatu aplikasi. Controller ditugaskan untuk mengawal atau menjadi “orang tengah” antara view
dan model.Sebagai contoh,apabila anda membuka url facebook.com,komponen controller akan
memproses dan menghantar permintaan anda,dan paparan Home Page facebook.com akan
muncul.
1.3 View.
Fungsi view secara ringkas adalah komponen untuk memaparkan data dan paparan antaramuka
grafikal (GUI). View ditugaskan untuk memaparkan paparan data atau paparan antaramuka
grafikal yang dihantar melalui controller yang kemudiannya membolehkan pengguna berinteraksi
dengan aplikasi.Sebagai contoh, anda mengisi borang daftar di facebook.com,borang itu adalah
elemen HTML yang dipaparkan dari komponen view.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
6	
  
2. Pemasangan CakePHP pada stesen kerja lokal
( Local Workstation/Localhost).
Untuk memulakan pembelajaran anda perlu memuat turun CakePHP Framework versi 2.0 dan ke
atas jika anda belum lagi mempunyai CakePHP framework di .Muat turun CakePHP Framework di
https://github.com/cakephp/cakephp/tags.
Modul panduan ini akan menggunakan CakePHP 2.5.7 .
Gambar rajah di bawah menunjukkan struktur direktori CakePHP yang dimuat turun tadi.
2.1 Pemasangan di Windows.
Jika anda menggunakan XAMPP sila ikut langkah di bawah:
Pergi ke fail zip cakephp yang anda muat turun tadi. Ekstrak dan copy direktori cakephp ke
direktori htdocs .
Contoh:
C:xampphtdocscakephpß Direktori Cake anda
atau
C:xampphtdocscakephp-2.5.7 ß Direktori Cake anda
Jika anda menggunakan WAMP sila ikut langkah di bawah:
Pergi ke fail zip cakephp yang anda muat turun tadi. Ekstrak dan copy direktori cakephp ke
direktori www .
Direktori Penerangan
app Fail aplikasi anda
lib Kod sumber atau enjin CakePHP tersimpan
disini.
plugins Untuk menyimpan CakePHP plugins
vendors Untuk menyimpan third-party PHP Libraries
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
7	
  
Contoh:
C:wampwwwcakephpß Direktori Cake anda
atau
C:wampwwwcakephp-2.5.7 ß Direktori Cake anda
Jika anda menggunakan pakej server selain dari yang diatas,anda cuma perlu mencari document
root directory server anda dan copy & paste direktori cakephp tadi.
2.2 Pemasangan di Linux.
Pergi ke fail zip cakephp yang anda muat turun tadi. Ekstrak dan copy direktori cakephp ke
direktori Document Root .
Contoh:
RHEL/Fedora/Centos: /var/www/html/cakephpß Direktori Cake anda
Debian/Ubuntu : /var/www/cakephp ß Direktori Cake anda
2.3 Pemasangan di OSX.
Jika anda pengguna XAMPP sila ikut langkah di bawah:
Pergi ke fail zip cakephp yang anda muat turun tadi. Ekstrak dan copy direktori cakephp ke
direktori htdocs.
Contoh:
/Applications/XAMPP/htdocs/cakephp ß Direktori Cake anda
Jika anda menggunakan pakej server selain dari yang diatas,anda cuma perlu mencari document
root directory server anda dan copy & paste direktori cakephp tadi.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
8	
  
3. Pemasangan CakePHP Console & Shell
Kelebihan CakePHP Framework bukan sahaja untuk digunakan sebagai web framework tetapi ia
juga boleh digunakan untuk membina Console Application.Kelebihan konsol ini adalah seperti
mengendalikan pelbagai tugasan seperti penyelenggaraan, dan menjana kod sumber untuk HTTP
request & response cycle.
Shell-shell yang terdapat di dalam aplikasi konsol ini antaranya adalah
bake,acl,api,i18n,schema,dan banyak lagi.Anda juga boleh membina shell anda sendiri kelak.
Peringatan!
Untuk menggunakan CakePHP Console & Command , anda perlu memasang PHP CLI terlebih
dahulu.
Rujuk: http://www.php-cli.com/
Cara memasang Cake Console CLI .
3.1 Windows
1.Pergi ke Start à Control Panel à System and Security à Advanced system settings
à Advanced à Enviroment Variables à cari PATH dan klik Edit.
2. Anda perlu menambah path ke direktori CakePHP yang anda muat turun tadi ke Variable
Value.
Contoh path yang akan ditambah: C:xampphtdocscakephp-2.5.7libCakeConsole.
Contoh gambar:
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
9	
  
3.2 Linux
1.Buka terminal dan jalankan arahan(command) ini:
~$ vi ~/.bashrc
2. Tambahkan kod ini :
export PATH="$PATH:/var/www/html/cakephp/lib/Cake/Console"
atau
export PATH="$PATH:/var/www/cakephp/lib/Cake/Console"
Contoh gambar:
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
10	
  
3.3 OSX
1.Buka terminal dan jalankan arahan(command) ini:
~$ vi ~/.bashrc
atau
~$ vi ~/.bash_profile
2. Tambahkan kod ini :
export PATH="$PATH:/var/www/html/cakephp/lib/Cake/Console"
atau
export PATH="$PATH:/var/www/cakephp/lib/Cake/Console"
Contoh gambar:
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
11	
  
Untuk mengetahui samada cake console berjaya dipasang pada variable path,jalankan command
berikut:
cake
Contoh paparan Cake console .
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
12	
  
4. Membina sebuah aplikasi CakePHP – Sistem
Pengurusan Projek.
Kita akan membina sebuah aplikasi web iaitu Sistem Pengurusan Projek atau Project
Management System.
Ciri-ciri dan fungsi yang ada pada sistem adalah:
I. Menambah,kemaskini, dan menghapus Projek.
II. Membuat perhubungan antara ahli(Users) untuk setiap satu projek.
III. Seorang ahli akan mempunyai banyak projek.
IV. Satu projek akan mempunyai banyak ahli yang menyertai.
V. Fungsi Log keluar & Log masuk (Login & Logout Function)
Untuk modul panduan ini,kita akan menggunakan kelebihan CakePHP Console & Shell untuk
mencipta prototaip aplikasi CakePHP ini dengan lebih pantas dan berkualiti.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
13	
  
5. Menjana struktur aplikasi menggunakan Cake
Bake Console.
CakePHP Bake Console adalah satu lagi usaha untuk mencipta aplikasi CakePHP dengan
pantas.Bake dapat membina satu aplikasi yang boleh terus berfungsi dalam masa beberapa minit
sahaja. Bake console akan mencipta fail untuk model,view dan controller beserta kod sumber
fungsi asas seperti index,view,add,edit,dan delete di dalam controller.
Untuk menjana atau mencipta struktur aplikasi Cake menggunakan Bake Console,sila taip arahan
di bawah di terminal/cmd anda.
cake bake
Paparan seperti dibawah akan muncul *
*Sila pastikan anda berada di dalam document root server yang betul.
Contoh:
Jika anda menggunakan Linux,anda perlu berada di /var/www/html/ atau /var/www/.
Jika anda menggunakan XAMPP di OSX,anda perlu berada di /Applications/XAMPP/htdocs/.
Jika anda menggunakan XAMPP di windows,anda perlu berada di C:xampphtdocs.
Ikut arahan di bawah ini untuk langkah seterusnya.
S = Soalan
J = Jawapan
S:	
  What is the path to the project you want to bake?
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
14	
  
J: Jika anda menggunakan Linux/OSX,sila letakkan nama aplikasi yang anda mahu.
Untuk modul panduan ini saya menggunakan nama pms untuk aplikasi pengurusan projek ini.
S:
J: Taip “y” untuk yes.
Tukar lokasi direktori anda sekarang dan masuk ke direktori aplikasi yang baru kita cipta tadi iaitu
direktori pms
cd pms
lihat senarai direktori dan fail dengan menggunakan arahan ini.
Linux/OSX
ls –la
Windows
dir
Hasilnya adalah seperti di bawah ini:
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
15	
  
Penerangan struktur direktori dan fail.
Nota peringatan !
Jika anda sudah mempunyai direktori aplikasi, anda harus menggunakan
Cake Console & Command didalam direktori aplikasi anda.Sebagai
contoh,jika direktori aplikasi anda bernama “pms”,anda perlu
menjalankan arahan cake bake didalam direktori “pms” bukan di luar dari
direktori “pms”.
Direktori Penerangan
Config Menyimpan (beberapa) fail konfigurasi CakePHP , maklumat sambungan
pangkalan data,dan beberapa fail yang penting.
Console Mengandungi arahan dan tugas untuk Cake Console & Shell.
Controller Mengandungi fail controller untuk aplikasi anda
Index.php Fail untuk bootstrapping aplikasi anda.
Lib Mengandungi libraries yang bukan dari 3rd
parties vendor.
Locale Menyimpan baris bahasa untuk tujuan pelbagai bahasa dalam satu aplikasi .
Model Mengandungi fail model untuk aplikasi anda
Plugin Pakej plugin disimpan disini.
Test Menyimpan fail test case dan test fixtures untuk tujuan unit test ke atas
aplikasi anda
tmp Disini CakePHP menyimpan data sementara(temporary data) seperti error
log,cookies,session,dll.
Vendor 3rd
parties class atau libraries disimpan disini
View Mengandungi fail view untuk aplikasi anda
webroot Menyimpan fail CSS,Javascript,Image,dll.
.htaccess Untuk melakukan apache url rewriting.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
16	
  
5.1 CakePHP Skema & Model.
Kelebihan model didalam cakephp adalah ia kemampuan model membuat perhubungan dan
pemetaan objek atau Object Relational Mapping(ORM). Untuk melakukan perhubungan ini,kita
perlu menggunakan penyatuan model (Association).
Jenis Perhubungan (Relationship Type)
Perhubungan
(Relationship)
Jenis Penyatuan
(Association Type)
Contoh
one to one hasOne Satu pengguna sistem
mempunyai satu projek.
one to many hasMany Satu projek mempunyai
banyak ahli.
many to one belongsTo 10 projek mempunyai satu
ahli.
many to many hasAndBelongsToMany(HABTM) 10 projek mempunyai 10 ahli
dan sebaliknya.
Untuk aplikasi pengurusan projek ini kita akan menggunakan perhubungan belongsTo,dan
hasMany.Perhubungan model ini adalah seperti berikut:
Projects hasMany Project Applicants
Users hasMany ProjectApplicants
Project Applicants belongsTo Projects
Project Applicants belongsTo Users
Table yang perlu ada :-
projects : untuk menyimpan data projek.
users : untuk menyimpan data pengguna/ahli.
project_applicants : untuk menyimpan data ahli yang menyertai projek.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
17	
  
Rujuk gambarajah dibawah untuk memahami ERD pangkalan data aplikasi ini.
Entity Relationship Diagram(ERD) untuk aplikasi Pengurusan Projek.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
18	
  
Untuk membina table pangkalan data tadi. Sila copy skrip arahan MySQL di bawah & paste ke
MySQL DBA Tool yang anda gunakan contohnya phpmyadmin:
CREATE TABLE `projects` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`name` varchar(255) NOT NULL DEFAULT '',
`details` varchar(255) NOT NULL DEFAULT '',
`start_date` datetime NOT NULL,
`end_date` datetime NOT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
CREATE TABLE `project_applicants` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`project_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
`created_by` int(11) DEFAULT NULL,
`modified_by` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`username` varchar(255) NOT NULL DEFAULT '',
`role` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
Anda juga boleh mencipta skema data dengan menggunakan php skrip.
Caranya adalah dengan mencipta satu fail schema.php didalam direktori Config/Schema.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
19	
  
	
  
Skrip fail Config/Schema/schema.php.
<?php
class AppSchema extends CakeSchema {
public function before($event = array()) {
return true;
}
public function after($event = array()) {
}
public $project_applicants = array(
'id' => array('type' => 'integer', 'null' => false, 'default'
=> null, 'unsigned' => true, 'key' => 'primary'),
'project_id' => array('type' => 'integer', 'null' => false,
'default' => null, 'unsigned' => false),
'user_id' => array('type' => 'integer', 'null' => false,
'default' => null, 'unsigned' => false),
'created' => array('type' => 'datetime', 'null' => true,
'default' => null),
'modified' => array('type' => 'datetime', 'null' => true,
'default' => null),
'user_id' => array('type' => 'integer', 'null' => false,
'default' => null, 'unsigned' => false),
'indexes' => array(
'PRIMARY' => array('column' => 'id', 'unique' => 1)
),
'tableParameters' => array('charset' => 'latin1', 'collate' =>
' latin1_swedish_ci', 'engine' => 'InnoDB')
);
public $projects = array(
'id' => array('type' => 'integer', 'null' => false, 'default'
=> null, 'unsigned' => true, 'key' => 'primary'),
'name' => array('type' => 'string', 'null' => false, 'collate'
=> 'latin1_swedish_ci', 'charset' => 'latin1'),
'details' => array('type' => 'string', 'null' => false,
'collate' => 'latin1_swedish_ci', 'charset' => 'latin1'),
'start_date' => array('type' => 'datetime', 'null' => false,
'default' => null),
'end_date' => array('type' => 'datetime', 'null' => false,
'default' => null),
'created' => array('type' => 'datetime', 'null' => true,
'default' => null),
'modified' => array('type' => 'datetime', 'null' => true,
'default' => null),
'user_id' => array('type' => 'integer', 'null' => false,
'default' => null, 'unsigned' => false),
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
20	
  
	
  
'indexes' => array(
'PRIMARY' => array('column' => 'id', 'unique' => 1)
),
'tableParameters' => array('charset' => 'latin1',
'collate' => 'latin1_swedish_ci', 'engine' => 'InnoDB')
);
public $users = array(
'id' => array('type' => 'integer', 'null' => false, 'default'
=> null, 'unsigned' => true, 'key' => 'primary'),
'name' => array('type' => 'string', 'null' => false, 'collate'
=> 'latin1_swedish_ci', 'charset' => 'latin1'),
'username' => array('type' => 'string', 'null' => false,
'collate' => 'latin1_swedish_ci', 'charset' => 'latin1'),
'password' => array('type' => 'string', 'null' => false,
'collate' => 'latin1_swedish_ci', 'charset' => 'latin1'),
'created' => array('type' => 'datetime', 'null' => true,
'default' => null),
'modified' => array('type' => 'datetime', 'null' => true,
'default' => null),
'indexes' => array(
'PRIMARY' => array('column' => 'id', 'unique' => 1)
),
'tableParameters' => array('charset' => 'latin1', 'collate' =>
'latin1_swedish_ci', 'engine' => 'InnoDB')
);
}
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
21	
  
5.2 Cara untuk membina skema pangkalan data menggunakan Cake Schema
Console.
Schema shell berfungsi untuk membina skema objek dan juga skema MySQL dump. Schema
shell juga boleh digunakan untuk mengemaskini atau mengubah skema pangkalan data.Rujuk
http://book.cakephp.org/2.0/en/console-and-shells/schema-management-and-migrations.html
Untuk mengetahui arahan-arahan yang ada didalam Schema Console,gunakan arahan ini
cake schema
Paparan seperti dibawah akan muncul
Sebentar tadi anda telah mencipta fail schema.php, oleh itu gunakan arahan dibawah ini untuk
membina skema objek di pangkalan data MySQL .
cake schema create
Hasil daripada arahan di atas adalah,ia akan mencipta table di pangkalan data MySQL.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
22	
  
Jadual dibawah menerangkan kegunaan arahan Schema Console.
Arahan Fungsi
view Memaparkan kandungan fail skema.
generate Menjana skema berdasarkan model yang dicipta . Untuk memproses kesemua
data yang ada didalam table sql gunakan parameter –f .
dump Menjana/mencipta SQL dump fail. contoh : schema.sql.
create Memadam dan menjana semula skema berdasarkan fail skema yang dicipta.
update Mengubah table data berdasarkan fail skema yang dicipta.
Contoh pangkalan data MySQL yang telah dicipta dan dibuka menggunakan perisian Sequel Pro.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
23	
  
5.3 Penyambungan pangkalan data MySQL menggunakan Cake Bake Console
(MYSQL & CakePHP Connection).
Untuk membuat penyambungan antara MySQL dan CakePHP dengan mudah,anda boleh
menggunakan arahan cake bake.
Pastikan anda berada didalam direktori aplikasi anda iaitu direktori pms & jalankan arahan cake
bake sekali lagi.
S = Soalan
J = Jawapan
S:
J: Tekan “enter” .Kita akan gunakan tetapan default .
S:
J: Tekan “enter”. Kita akan gunakan MySQL untuk datasource/database.
S:	
  Persistent Connection?
J: Taip “y” jika hendak mengaktifkan,Tekan “enter” jika tidak.
S: Database Host
J: Tekan “enter” jika localhost,isikan host anda jika ia berlainan dari localhost.
S:Port?
J: Taipkan nombor MySQL jika anda menggunakan port untuk melakukan penyambungan
MySQL,Tekan “enter” jika tidak.
S: User
J: Taipkan nama pengguna(username) MySQL anda,jika ia adalah “root” tekan “enter”.
S: Password
J: Taipkan kata laluan(password) MySQL anda,jika tiada tekan “enter” dan taip “y” untuk soalan
seterusnya.
S: Database Name
J: Taipkan nama pangkalan data yang kita cipta tadi iaitu “pms”
S: Table Prefix?
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
24	
  
J: Taipkan nama table prefix jika anda mahu.
S: Table encoding
J: Taipkan nama table encoding jika anda mahu ubah.
S:
J: Taip “y” jika anda berpuashati,taip “n” jika anda ingin mengulangi proses semula.
S:	
  Do you wish to add another database configuration?
J: Taip “y” jika anda mahu menambah penyambungan pangkalan data,tekan “enter” jika tidak.
Untuk mengetahui sama ada penyambungan tadi berjaya atau tidak,buka browser dengan url ini,
http://localhost/pms
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
25	
  
Jika anda mendapat mesej seperti ini,
Bermakna anda mempunyai masalah dengan penyambungan yang dibuat sebentar tadi. Anda
boleh melakukan pengubahan tetapan dengan membuka fail database.php di dalam direktori
Config/Schema/database.php
Rujuk gambar jika kurang faham.
Anda perlu menambah variable ‘unix_socket’ ke dalam $default = array() dan tetapkan nilainya .
Contoh:
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => 'admin321',
'database' => 'pms',
'unix_socket' => '/var/mysql.sock', //unix socket
);
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
26	
  
6 .Menjana kod sumber (Source Code)
menggunakan Cake Bake Console.
6.1 Penerangan Interactive Bake Shell.
Arahan Fungsi
cake bake db_config Membuat tetapan untuk konfigurasi pangkalan data
cake bake model Menjana kod sumber untuk model yang akan mengandungi
validation & association.
cake bake view Menjana kod sumber HTML untuk paparan pengguna.
cake bake controller Menjana kod sumber untuk model yang akan mengandungi
fungsi seperti index,view,add,edit, dan delete.
cake bake project Untuk membina struktur aplikasi CakePHP yang baru.
cake bake fixture Untuk menjana kod sumber untuk test fixture.
cake bake test Untuk menjana kod sumber untuk CakePHP unit test.
cake bake plugin plugin_name Menjana kod sumber untuk plugin mengikut struktur direktori
CakePHP
cake bake all Menjana kod sumber untuk model,view,controller,test,
sekaligus.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
27	
  
6.2 Menjana kod sumber untuk Model,View & Controller.
Pastikan anda berada di dalam direktori aplikasi anda iaitu “pms”.
Sekarang taipkan arahan di bawah.
cake bake all
Paparan seperti dibawah ini akan keluar
Sekarang apa yang perlu anda lakukan adalah,masukkan nombor mengikut urutan.Kita akan
bake ProjectApplicant dahulu. Jadi masukkan nombor 1 pada terminal/cmd.
Anda akan mendapat paparan seperti ini apabila ia console bake berjaya menjana kod sumber
untuk Model,View & Controller.Rujuk gambar.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
28	
  
SFail view yang telah
dicipta
Proses bake selesai untuk ProjectApplicant.
Seterusnya, untuk bake model Project & User, anda cuma perlu mengulangi langkah di atas.
Untuk mengetahui sama ada cake menjana & mencipta kod sumber tadi,kita buka folder
Model,View & Controller
SFail model yang telah
dicipta
SFail controller yang telah
dicipta	
  
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
29	
  
Kita akan cuba menambah user ke dalam sistem kita dengan membuka url
http://localhost/pms/users/add.
Paparan seperti dibawah ini akan muncul.
Sila cuba tambah user dan submit.
Kemudian ia akan membawa kita ke url http://localhost/pms/users dan menyenaraikan users
yang ada didalam pangkalan data.
Sekarang ini anda sudah pun mempunyai kod sumber asas untuk sistem pengurusan projek ini.
Jika anda buka fail Controller/UsersController.php,anda akan melihat fungsi
index,view,add,edit dan delete sudah terbina.Fungsi inilah yang memainkan peranan untuk
mengawal perjalan sistem anda.
Jika anda buka fail Model/User.php,anda akan melihat validation rules & association telah
terbina dan ia akan mengawal bisnes logik aplikasi anda.
Jika anda buka fail View/Users/index.ctp,anda akan melihat kod HTML bersama PHP yang
digunakan untuk memapar data dari pangkalan data.Disini jugalah anda akan menghias dan
mereka bentuk paparan antaramuka pengguna(User Interface) sistem anda.
Mudah kan?
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
30	
  
6.3 Route
Routing adalah salah satu kelebihan yang berfungsi untuk mencantikkan url sebuah sistem web.
Route dapat menukarkan url anda dari begini:
http://localhost/pms/projects/view/1
kepada
http://localhost/pms/projek/tunjuk/1
Untuk mengemaskini route,anda perlu melakukannya pada fail Config/route.php.Kesemua route
akan dikawal disini.
Ok mari kita cuba tukar url untuk bahagian projects pada bahasa melayu.
Copy & paste kod dibawah ini ke dalam fail Config/route.php
Router::connect('/senarai-projek', array('controller' =>
'projects', 'action' => 'index'));
Router::connect('/projek/tambah', array('controller' =>
'projects', 'action' => 'add'));
Router::connect('/senarai-pengguna', array('controller' =>
'users', 'action' => 'index'));
Router::connect('/pengguna/tambah', array('controller' =>
'users', 'action' => 'add'));
Router::connect('/senarai-peserta-projek', array('controller' =>
'project_applicants', 'action' => 'index'));
Router::connect('/peserta-projek/tambah', array('controller' =>
'project_applicants', 'action' => 'add'));
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
31	
  
7. Membina fungsi log masuk dan log keluar. (Login
& Logout with Simple Authentication and
Authorization Application)
Rujukan : http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html
7.1 Membuat tetapan dan kemaskini.
Kita perlu menambah satu lagi field di table users,iaitu field “role”.
Untuk melakukan pengubahan ini,kita cuma perlu menambah key dan value seperti dibawah ini
pada array $users di dalam fail Config/Schema/schema.php.
'role' => array('type'=> 'string', 'null' => false, 'collate'=>
'latin1_swedish_ci', 'charset'=> 'latin1'),
untuk mengemaskini skema pangkalan data yang baru kita tambah tadi,taip arahan di bawah ini
pada terminal/cmd.
cake schema update
skema pangkalan data akan dikemaskini mengikut field table yang kita tambah tadi.
Seterusnya,buka fail Model/User.php
Tambahkan index array dibawah ini ke dalam array $validate .
'role' => array(
'valid'=> array(
'rule' => array('inList', array('admin', 'staff')),
'message' => 'Sila pilih salah satu jenis
pengguna',
'allowEmpty' => false
)
)
Rujuk gambar disebelah.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
32	
  
Seterusnya buka fail View/Users/add.ctp dan tambahkan kod dibawah ini selepas kod echo
$this->Form->input('password); .
echo $this->Form->input('role', array(
options' => array('admin' => 'Admin', 'staff' => 'Staff')
));
Rujuk gambar dibawah.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
33	
  
7.2 Pengesahan Log Masuk & Log Keluar (Login & Logout Authentication)
Kita sekarang sudah boleh bermula untuk membina fungsi pengesahan log masuk dan log keluar
untuk sistem pengurusan projek ini.
Kita akan menggunakan 2 komponen yang telah terbina bersama CakePHP iaitu:
-Komponen Session
-Komponen Auth
Buka fail Controller/AppController.php dan tambahkan kod dibawah ini ke dalam class
AppController.
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'projects',
'action' => 'index',
),
'logoutRedirect' => array(
'controller' => 'users',
'action' => 'login'
),
'authenticate' => array(
'Form' => array(
'passwordHasher' => 'Blowfish',
)
)
)
);
Rujuk gambar di sebelah.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
34	
  
Kita perlu menambah dua fungsi pada UsersController iaitu fungsi login() dan fungsi logout()
untuk mengawal perjalanan log masuk dan log keluar sistem ini.
Buka fail Controller/UsersController.php dan tambahkan kod dibawah ini pada class
UsersController
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirectUrl());
}
$this->Session->setFlash(__('Maaf ada sila cek semula
username & password anda.'));
}
}
public function logout() {
return $this->redirect($this->Auth->logout());
}
Rujuk gambar di sebelah.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
35	
  
Fungsi login akan mengesan sama ada pengguna telah memasukkan data yang sah atau
tidak.Jika data yang diberi adalah sah,ia akan membenarkan pengguna mengakses url yang
diminta.
Fungsi logout akan memadam sesi (Session) pengguna yang telah mengakses sistem dan terus
dibawa keluar dari sistem.
Seterusnya kita akan membuat paparan untuk fungsi login.
Untuk membuat paparan login,anda perlu membuka direktori View/Users/ .dan cipta satu fail
bernama login.ctp.Tambahkan kod dibawah ini pada fail login.ctp tadi.
<div class="users form">
<?php echo $this->Session->flash('auth'); ?>
<?php echo $this->Form->create('User'); ?>
<fieldset>
<legend>
<?php echo __(‘Sila isikan Username & password’); ?>
</legend>
<?php echo $this->Form->input('username');
echo $this->Form->input('password');
?>
</fieldset>
<?php echo $this->Form->end(__('Login')); ?>
</div>
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
36	
  
Untuk mengetahui sama ada fungsi ini berjaya atau tidak,sila buka browser dan akses sistem
kita.
Jika anda berjaya, anda akan mendapat paparan seperti dibawah
Seterusnya kita akan menambah hyperlink untuk fungsi logout & login pada header page
sistem pms ini.
Buka fail View/Layouts/default.ctp,copy kod dibawah ini dan paste ke dalam elemen <header>.
<?php
$userDetails = $this->Session->read('Auth.User');
if(isset($userDetails)):
echo $this->Html->link('Log
Masuk',array('controller'=>'users','action'=>'logout'));
else:
echo $this->Html->link('Log
Keluar',array('controller'=>'users','action'=>'logout'));
endif;
?>
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
37	
  
Maksud kod di atas ialah:
$this->Session->read(‘Auth.User’) :Membaca sesi pengguna sistem menggunakan
Session Helper.
if(isset($userDetails)) : Memeriksa sama ada sesi pengguna wujud atau
tidak.
Jika sesi pengguna wujud, hyperlink akan bertukar kepada teks “Log Keluar” untuk fungsi
Logout.
Jika tidak,teks hyperlink akan bertukar kepada “Log Masuk” untuk fungsi login.
Jika anda berjaya,paparannya adalah seperti di bawah ini.
7.3 Penggunaan fungsi beforeFilter.
Rujukan : http://book.cakephp.org/2.0/en/controllers.html#request-life-cycle-callbacks
Fungsi beforeFilter adalah fungsi callback yang telah terbina bersama CakePHP .
Apa itu fungsi callback (Callback function) ?
Secara ringkas fungsi callback ini adalah fungsi yang akan berjalan selepas fungsi yang dipilih
telah dijalankan.
Contoh callback: beforeFilter akan berfungsi sebelum fungsi yang ada didalam sesebuah
controller dijalankan dan selepas fungsi didalam komponen Auth berjaya dijalankan.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
38	
  
Contoh situasi :
Anda membuka sistem anda seperti biasa untuk melihat senarai projek di url
http://localhost/pms/projects/index. Akan tetapi,anda telah dibawa ke url
http://localhost/pms/users/login .
Ini kerana fungsi loginRedirect didalam komponen Auth telah berjalan dan menapis akses anda
ke url yang anda minta kerana untuk melihat isi kandungan url
http://localhost/pms/projects/index anda perlu log masuk terlebih dahulu. Bagaimana pula jika
anda hendak melihat senarai projek tanpa perlu log masuk?
Anda hanya perlu menambah kod seperti dibawah ini bersama fungsi beforeFilter ke dalam
ProjectsController. Buka fail Controller/ProjectsController.php dan tambah kod dibawah
didalam class ProjectsController.
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('index');
}
$this->Auth->allow akan membenarkan fungsi yang dinyatakan didalam parameter allow()
berjalan tanpa dihalang oleh Auth.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
39	
  
Dan sekarang anda buka semula url http://localhost/pms/projects/index. Anda
sudah boleh melihat senarai projek seperti paparan dibawah ini.
Anda boleh menambah seberapa banyak fungsi yang anda mahu penggunaannya diakses tanpa
log masuk ke dalam sistem.
Contoh kod:
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('index',’add’,’view’);
}
Contoh kod diatas akan membenarkan fungsi index,add dan view pada class ProjectsController
diakses tanpa pengguna perlu log masuk ke dalam sistem.
Mari teruskan dengan membenarkan fungsi login,logout dan add di UsersController
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
40	
  
dapat diakses sebelum ditapis oleh Auth komponen.Ini membolehkan pengguna
mendaftar/menambah pengguna baru .
Tambah kod dibawah ini ke dalam fail Controller/UsersController.php
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('login', 'logout','add');
}
7.4 Password Hashing.
Untuk password hashing kita akan gunakan BlowFishPasswordHasher yang terbina bersama
CakePHP 2.
Untuk mengetahui lebih lanjut tentang Blowfish Encryption sila rujuk:
http://en.wikipedia.org/wiki/Blowfish_%28cipher%29
Untuk menggunakan class BlowFishPasswordHasher kita perlu memanggil class tersebut
dengan menggunakan kod dibawah ini ke dalam fail Model/User.php:
App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth');
Letak kod diatas selepas kod App::uses('AppModel', 'Model');.
Seterusnya tambahkan fungsi callback beforeSave ke dalam model User
public function beforeSave($options = array()) {
if (isset($this->data[$this->alias]['password'])) {
$passwordHasher = new
BlowfishPasswordHasher();
$this->data[$this->alias]['password'] = $passwordHasher-
>hash(
$this->data[$this->alias]['password']
);
}
return true;
}
Sekarang ini,apabila anda menambah pengguna baru,setiap password akan disulitkan dengan
beberapa unik karakter yang dipilih secara rawak.
Contoh password yang telah menggunakan BlowFishPasswordHasher
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
41	
  
7.5 Penapisan akses kandungan mengikut kategori pengguna sistem
(Authorization).
Sekarang ini,kita akan menambah penapisan bagi setiap pengguna yang akan mengakses sistem
ini supaya mereka berada di kawasan yang sepatutnya.
Contohnya pengguna di dalam kategori staff tidak dibenarkan untuk edit atau delete projek yang
telah dicipta oleh admin.
Untuk menjayakan kaedah ini,anda perlu mengubah beberapa kod di model,view,dan controller.
Kita akan buat pada satu seksyen dahulu iaitu seksyen projects.Untuk seksyen seterusnya
(seksyen users,sekysen project applicants) ,anda cuma perlu mengikuti langkah-langkah dibawah
ini semula dan ubah kod mengikut nama controller/model seksyen yang anda ubah.
Kita mula dengan mengubah kod di dalam fail View/Projects/add.ctp.
Sila buang kod dibawah ini dari fail View/Projects/add.ctp
echo $this->Form->input('user_id');
Kemudian buka fail Controller/ProjectsController.php dan tambahkan kod dibawah ini didalam
fungsi add.
$this->request->data['Project']['user_id'] = $this->Auth->user('id');
Kod fungsi add anda haruslah seperti dibawah ini
public function add() {
if ($this->request->is('post')) {
$this->request->data['Project']['user_id'] = $this->Auth-
>user('id');
$this->Project->create();
if ($this->Project->save($this->request->data)) {
$this->Session->setFlash(__('Projek berjaya
disimpan!'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('Maaf projek tidak
berjaya disimpan,sila cuba sekali lagi'));
}
}
$users = $this->Project->User->find('list');
$this->set(compact('users'));
}
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
42	
  
Fungsi $this->Auth->user() akan membaca data pengguna yang telah log masuk kedalam
sistem.Jika anda mengisi parameter id seperti $this->Auth->user(‘id),ia akan mengambil
id pengguna tersebut sahaja.
Seterusnya buka fail Controller/AppController.php dan tambah kod dibawah ini pada array
komponen Auth.
'authorize' => array('Controller')
dan tambahkan fungsi isAuthorized() untuk mengesan kategori pengguna yang log masuk ke
sistem.
public function isAuthorized($user) {
// Admin boleh akses semua fungsi
if (isset($user['role']) && $user['role'] === 'admin') {
return true;
}
// Jika bukan admin,tidak dibenarkan akses
return false;
}
Kod anda haruslah seperti dibawah ini.Rujuk gambar.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
43	
  
Kita baru sahaja membina mekanisma pengesahan yang mudah dalam masa yang singkat.
Dengan ini,pengguna yang didalam kategori admin akan dapat mengakses kesemua lokasi
sistem tetapi tidak pada staff.
Untuk membenarkan staff atau pengguna lain yang sudah log masuk mengakses pada lokasi
tertentu (contoh: http://localhost/pms/projects/add) ,ianya amat mudah.Kita akan gunakan
fungsi isAuthorized sekali lagi tetapi pada kali ini kita tambah pada controller Projects.
Buka fail Controller/ProjectsController.php dan tambah kod dibawah ini,
public function isAuthorized($user) {
//akan memberi akses kepada pengguna yang sudah log masuk
//supaya dapat menambah projek baru
if ($this->action === 'add') {
return true;
}
}
Dengan fungsi di atas ini,kita akan membenarkan staff untuk menambah projek baru.
Baiklah,mari kita cuba apa yang kita sudah buat.
Anda akan mendapat paparan seperti dibawah ini jika anda berjaya.
Asas	
  CakePHP	
  MVC:	
  Membina	
  Aplikasi	
  Web	
  (CRUD)	
  CakePHP	
  2.	
  
	
  
No	
  Siri:DIR01	
   ©Hakcipta	
  Terpelihara	
  2014	
  
	
   	
  
44	
  
Jika anda mengalami sebarang masalah ,anda perlu mengulangi dan mengikut langkah-langkah
yang diberi dengan teliti atau anda boleh mendapatkan semua kod sumber untuk sistem ini di
github saya di https://github.com/malikperang/pms.
Jika anda mengalami masalah dengan konfigurasi database atau konfigurasi CakePHP,
Pergi ke https://github.com/malikperang/pms/tree/master/Config.
Jika anda mengalami masalah dengan Model,
Pergi ke https://github.com/malikperang/pms/tree/master/Model.
Jika anda mengalami masalah dengan Controller,
Pergi ke https://github.com/malikperang/pms/tree/master/Controller.
Jika anda mengalamai masalah dengan View
Pergi ke https://github.com/malikperang/pms/tree/master/View.
Sila kenalpasti jenis masalah anda dan semak semula panduan ini dengan teliti dan jika anda
mahu bertanya secara peribadi boleh e-mail saya di malikperang@gmail.com.

Más contenido relacionado

La actualidad más candente

Bab 4 tools-pemrograman-web-dan-database
Bab 4 tools-pemrograman-web-dan-databaseBab 4 tools-pemrograman-web-dan-database
Bab 4 tools-pemrograman-web-dan-database
febeniken
 
Tutorial Pembuatan Aplikasi Website Beserta Databasenya
Tutorial Pembuatan Aplikasi Website Beserta DatabasenyaTutorial Pembuatan Aplikasi Website Beserta Databasenya
Tutorial Pembuatan Aplikasi Website Beserta Databasenya
RCH_98
 
Cara mudah koneksi php dan mysql dengan database
Cara mudah koneksi php dan mysql dengan databaseCara mudah koneksi php dan mysql dengan database
Cara mudah koneksi php dan mysql dengan database
Programmer and Design
 
Webprograming
WebprogramingWebprograming
Webprograming
andreboys
 

La actualidad más candente (16)

Bab 4 tools-pemrograman-web-dan-database
Bab 4 tools-pemrograman-web-dan-databaseBab 4 tools-pemrograman-web-dan-database
Bab 4 tools-pemrograman-web-dan-database
 
Tug as
Tug asTug as
Tug as
 
Cara Membuat Web Dasar
Cara Membuat Web DasarCara Membuat Web Dasar
Cara Membuat Web Dasar
 
Tutorial Pembuatan Aplikasi Website Beserta Databasenya
Tutorial Pembuatan Aplikasi Website Beserta DatabasenyaTutorial Pembuatan Aplikasi Website Beserta Databasenya
Tutorial Pembuatan Aplikasi Website Beserta Databasenya
 
Tug as ii
Tug as iiTug as ii
Tug as ii
 
Panduan Pemrograman Berbasis Web dengan HTML, PHP, dan Database MySQL
Panduan Pemrograman Berbasis Web dengan HTML, PHP, dan Database MySQLPanduan Pemrograman Berbasis Web dengan HTML, PHP, dan Database MySQL
Panduan Pemrograman Berbasis Web dengan HTML, PHP, dan Database MySQL
 
Cara mudah koneksi php dan mysql dengan database
Cara mudah koneksi php dan mysql dengan databaseCara mudah koneksi php dan mysql dengan database
Cara mudah koneksi php dan mysql dengan database
 
P9 desain-web-statis-dinamis
P9 desain-web-statis-dinamisP9 desain-web-statis-dinamis
P9 desain-web-statis-dinamis
 
Contoh laporan job sheet magang smk
Contoh laporan job sheet magang smkContoh laporan job sheet magang smk
Contoh laporan job sheet magang smk
 
Laporan
LaporanLaporan
Laporan
 
Jobsheet multimedia
Jobsheet multimediaJobsheet multimedia
Jobsheet multimedia
 
Membuat buku-tamu dengan Php
Membuat buku-tamu dengan PhpMembuat buku-tamu dengan Php
Membuat buku-tamu dengan Php
 
Ci 1
Ci 1Ci 1
Ci 1
 
Tugas 2
Tugas 2Tugas 2
Tugas 2
 
Tutorial php membuat Aplikasi Inventaris
Tutorial php membuat Aplikasi InventarisTutorial php membuat Aplikasi Inventaris
Tutorial php membuat Aplikasi Inventaris
 
Webprograming
WebprogramingWebprograming
Webprograming
 

Destacado

Toko online erd dan analisis sistem informasi penjualan berbasis web - mode...
Toko online   erd dan analisis sistem informasi penjualan berbasis web - mode...Toko online   erd dan analisis sistem informasi penjualan berbasis web - mode...
Toko online erd dan analisis sistem informasi penjualan berbasis web - mode...
brisma pambudi
 

Destacado (15)

Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
 
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhana
Tutorial Lengkap Cara Membuat Aplikasi Android SederhanaTutorial Lengkap Cara Membuat Aplikasi Android Sederhana
Tutorial Lengkap Cara Membuat Aplikasi Android Sederhana
 
Toko online erd dan analisis sistem informasi penjualan berbasis web - mode...
Toko online   erd dan analisis sistem informasi penjualan berbasis web - mode...Toko online   erd dan analisis sistem informasi penjualan berbasis web - mode...
Toko online erd dan analisis sistem informasi penjualan berbasis web - mode...
 
Ka 01.-praktikum-algoritma-pemrograman-2
Ka 01.-praktikum-algoritma-pemrograman-2Ka 01.-praktikum-algoritma-pemrograman-2
Ka 01.-praktikum-algoritma-pemrograman-2
 
Tutorial sistem informasi perpustakaan
Tutorial sistem informasi perpustakaanTutorial sistem informasi perpustakaan
Tutorial sistem informasi perpustakaan
 
Ka 05.-praktikum-pemrograman-web
Ka 05.-praktikum-pemrograman-webKa 05.-praktikum-pemrograman-web
Ka 05.-praktikum-pemrograman-web
 
Menjadi webmaster dalam 30 hari
Menjadi webmaster dalam 30 hariMenjadi webmaster dalam 30 hari
Menjadi webmaster dalam 30 hari
 
eBuku Aplikasi Praktikal web 2.0 untuk pembejaran Pengajaran
eBuku Aplikasi Praktikal web 2.0 untuk pembejaran PengajaraneBuku Aplikasi Praktikal web 2.0 untuk pembejaran Pengajaran
eBuku Aplikasi Praktikal web 2.0 untuk pembejaran Pengajaran
 
Laporan Tugas Akhir - Absensi SMS Gateway
Laporan Tugas Akhir - Absensi SMS GatewayLaporan Tugas Akhir - Absensi SMS Gateway
Laporan Tugas Akhir - Absensi SMS Gateway
 
Tugas 3 rekayasa web
Tugas 3 rekayasa webTugas 3 rekayasa web
Tugas 3 rekayasa web
 
Buku Ajar Pemrograman Web
Buku Ajar Pemrograman WebBuku Ajar Pemrograman Web
Buku Ajar Pemrograman Web
 
Cara membuat web
Cara membuat webCara membuat web
Cara membuat web
 
Unit testing
Unit testingUnit testing
Unit testing
 
Diktat Praktikum Aplikasi Berbasis Jaringan
Diktat Praktikum Aplikasi Berbasis JaringanDiktat Praktikum Aplikasi Berbasis Jaringan
Diktat Praktikum Aplikasi Berbasis Jaringan
 
SKRIPSI APLIKASI TOKO ONLINE SISTEM LELANG
SKRIPSI   APLIKASI TOKO ONLINE SISTEM LELANG SKRIPSI   APLIKASI TOKO ONLINE SISTEM LELANG
SKRIPSI APLIKASI TOKO ONLINE SISTEM LELANG
 

Similar a Asas cakephp-mvc

E commerce dengan php mysql
E commerce dengan php mysqlE commerce dengan php mysql
E commerce dengan php mysql
Alvin Setiawan
 
Belajar php-dengan-framework-code-igniter
Belajar php-dengan-framework-code-igniterBelajar php-dengan-framework-code-igniter
Belajar php-dengan-framework-code-igniter
George Kartutu
 
Belajar php-dengan-framework-code-igniter
Belajar php-dengan-framework-code-igniterBelajar php-dengan-framework-code-igniter
Belajar php-dengan-framework-code-igniter
Muhammad Rais
 

Similar a Asas cakephp-mvc (20)

Tugas rekweb 4
Tugas rekweb 4Tugas rekweb 4
Tugas rekweb 4
 
Installasi dan Konfigurasi Framework CakePhp
Installasi dan Konfigurasi Framework CakePhpInstallasi dan Konfigurasi Framework CakePhp
Installasi dan Konfigurasi Framework CakePhp
 
1100631021_YiiFramework
1100631021_YiiFramework1100631021_YiiFramework
1100631021_YiiFramework
 
Rekayasa web 0916 tugas 4 (individu)
Rekayasa web 0916 tugas 4 (individu)Rekayasa web 0916 tugas 4 (individu)
Rekayasa web 0916 tugas 4 (individu)
 
Tutorial ci
Tutorial ciTutorial ci
Tutorial ci
 
Membangun aplikasi berbasis web dengan menggunakan framework
Membangun aplikasi berbasis web dengan menggunakan frameworkMembangun aplikasi berbasis web dengan menggunakan framework
Membangun aplikasi berbasis web dengan menggunakan framework
 
Tugas 4 rekweb
Tugas 4 rekwebTugas 4 rekweb
Tugas 4 rekweb
 
0301_Pertemuan 1.pdf
0301_Pertemuan 1.pdf0301_Pertemuan 1.pdf
0301_Pertemuan 1.pdf
 
Kelompok 3.pptx
Kelompok 3.pptxKelompok 3.pptx
Kelompok 3.pptx
 
Tutorial ci
Tutorial ciTutorial ci
Tutorial ci
 
Chapter 1 perkenalan code igniter 2.0
Chapter 1 perkenalan code igniter 2.0Chapter 1 perkenalan code igniter 2.0
Chapter 1 perkenalan code igniter 2.0
 
Belajar Framework CodeIgnitier Lengkap (bahasa Indonesia)
Belajar Framework CodeIgnitier Lengkap (bahasa Indonesia)Belajar Framework CodeIgnitier Lengkap (bahasa Indonesia)
Belajar Framework CodeIgnitier Lengkap (bahasa Indonesia)
 
Belajar framework code igniter xii rpl
Belajar framework code igniter xii rplBelajar framework code igniter xii rpl
Belajar framework code igniter xii rpl
 
Frame work php
Frame work phpFrame work php
Frame work php
 
Tugas 4 0916 dimas setiadi 1511510610
Tugas 4 0916 dimas setiadi 1511510610Tugas 4 0916 dimas setiadi 1511510610
Tugas 4 0916 dimas setiadi 1511510610
 
E commerce dengan php mysql
E commerce dengan php mysqlE commerce dengan php mysql
E commerce dengan php mysql
 
Codeigneter | Annisa Nur Fitriyani
Codeigneter | Annisa Nur FitriyaniCodeigneter | Annisa Nur Fitriyani
Codeigneter | Annisa Nur Fitriyani
 
Belajar php-dengan-framework-code-igniter
Belajar php-dengan-framework-code-igniterBelajar php-dengan-framework-code-igniter
Belajar php-dengan-framework-code-igniter
 
Belajar php-dengan-framework-code-igniter
Belajar php-dengan-framework-code-igniterBelajar php-dengan-framework-code-igniter
Belajar php-dengan-framework-code-igniter
 
Php dgn framework code ignitier
Php dgn framework code ignitierPhp dgn framework code ignitier
Php dgn framework code ignitier
 

Asas cakephp-mvc

  • 1.         Versi CakePHP 2.* dan ke atas. Tarikh modul dicipta 12/12/2014 Versi modul 1.0 Email malikperang@gmail.com H a k c i p t a   T e r p e l i h a r a . F a r i z   I z w a n   B i n   K a m a r u z z a m a n . 2 0 1 4 .   ASAS  CAKEPHP  MVC:  MEMBINA   APLIKASI  WEB  (CRUD)  CAKEPHP  2.0.   Fariz  Izwan  Kamaruzzaman      
  • 2. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       2   Prakata Assalamualaikum W.B.T dan Selamat Sejahtera pada pembaca modul panduan ini. Saya amat bersyukur kerana dapat menyiapkan modul Asas CakePHP MVC:Membina Aplikasi Web(CRUD) CakePHP 2 ini untuk latihan CakePHP yang saya kendalikan . Dengan sebegitu banyak PHP Framework yang telah ada pada masa sekarang seperti Zend,Laravel,Symfony dll,CakePHP juga tidak ketinggalan kehebatan dan kelebihannya untuk bersaing bersama-sama PHP Framework yang lain. Setiap Framework pasti ada kelebihan & kekurangan masing-masing.Apa yang penting adalah keperluan terhadap sesuatu permintaan itu dapat ditunaikan mengikut spesifikasi dan had masa yang ditetapkan atau dengan erti kata lain,sesuatu framework itu dapat menyelesaikan kerja mengikut keperluan & had masa yang ditetapkan. Saya berharap dengan modul panduan ini ,anda dapat memahami asas PHP MVC Framework & CakePHP . Jom buat Cake!              
  • 3. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       3   Objektif & Keperluan   Objektif modul panduan ini adalah untuk memberi panduan kepada para pembangun PHP yang baru bermula menggunakan CakePHP Framework untuk mebina sebuah aplikasi web yang mempunyai fungsi Bina(Create),Baca(Read) Kemaskini(Update),Padam(Delete) atau dengan perkataan pendek CRUD. Modul panduan ini merangkumi: 1. Pengenalan ringkas CakePHP Framework. 1.1.Model 1.2.Controller 1.3.View. 2. Pemasangan CakePHP pada stesen kerja local (Local Workstation/Localhost). 2.1.Pemasangan di Windows 2.2.Pemasangan di Linux/*nix. 2.3.Pemasangan di OSX. 3. Pemasangan CakePHP Console & Shell. 3.1.Windows 3.2.Linux/*nix. 3.3.OSX. 4. Membina sebuah aplikasi CakePHP - Project Management System. 5. Menjana struktur aplikasi menggunakan Cake Bake Console. 5.1.CakePHP Skema & Model 5.2.Cara untuk membina skema pangkalan data menggunakan Cake Schema Console. 5.3.Penyambungan pangkalan data menggunakan Cake Bake Console (MYSQL & CakePHP Connection). 6. Menjana kod sumber (Source Code) menggunakan Cake Bake Console. 6.1.Penerangan Interactive Bake Shell. 6.2.Menjana kod sumber untuk Model,View & Controller. 6.3.Route 7. Membina fungsi log masuk dan log keluar (Login & Logout with Simple Authentication and Authorization Application) 7.1. Membuat Tetapan dan Kemaskini 7.2. Pengesahan Log Masuk & Log Keluar (Login & Logout Authentication) 7.3. Penggunaan fungsi beforeFilter. 7.4.Password Hashing. 7.5.Penapisan akses kandungan mengikut kategori pengguna sistem (Authorization).
  • 4. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       4   Keperluan Untuk mengikuti panduan ini. Anda perlu mempunyai asas dan pengalaman dalam pembangunan web seperti : - Tahu membina modul Create Read Update Delete (CRUD) menggunakan PHP dan MySQL - Tahu mereka bentuk struktur dan skema pengkalan data (Databases) menggunakan SQL (Modul ini menggunakan MYSQL). - Mempunyai asas HTML,CSS,dan Javascript. - Tahu menggunakan alat pengurusan pengkalan data(Database Administration Tools) seperti PhpMyAdmin,Sequel Pro,dll. - Sudah mempunyai HTTP server seperti Apache (Modul ini akan menggunakan Apache ). - Sudah mempunyai SQL server seperti MYSQL (Modul ini menggunakan MYSQL). - Mengetahui asas OOP (Object Oriented Programming).
  • 5. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       5   1.Pengenalan ringkas CakePHP Framework. 1.1 Model. Fungsi model secara ringkas adalah komponen yang akan berinteraksi dengan pangkalan data. Model ditugaskan untuk menerima,menghantar,dan memanipulasi bisnes data logik diantara pangkalan data dan controller. Sebagai contoh,setiap SQL query yang dijalankan haruslah diletakkan didalam model supaya informasi data dapat dikapsulkan dan disembunyikan(Data encapsulation & information hiding). 1.2 Controller. Fungsi controller secara ringkas adalah komponen untuk mengawal permintaan dan perjalanan sesuatu aplikasi. Controller ditugaskan untuk mengawal atau menjadi “orang tengah” antara view dan model.Sebagai contoh,apabila anda membuka url facebook.com,komponen controller akan memproses dan menghantar permintaan anda,dan paparan Home Page facebook.com akan muncul. 1.3 View. Fungsi view secara ringkas adalah komponen untuk memaparkan data dan paparan antaramuka grafikal (GUI). View ditugaskan untuk memaparkan paparan data atau paparan antaramuka grafikal yang dihantar melalui controller yang kemudiannya membolehkan pengguna berinteraksi dengan aplikasi.Sebagai contoh, anda mengisi borang daftar di facebook.com,borang itu adalah elemen HTML yang dipaparkan dari komponen view.
  • 6. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       6   2. Pemasangan CakePHP pada stesen kerja lokal ( Local Workstation/Localhost). Untuk memulakan pembelajaran anda perlu memuat turun CakePHP Framework versi 2.0 dan ke atas jika anda belum lagi mempunyai CakePHP framework di .Muat turun CakePHP Framework di https://github.com/cakephp/cakephp/tags. Modul panduan ini akan menggunakan CakePHP 2.5.7 . Gambar rajah di bawah menunjukkan struktur direktori CakePHP yang dimuat turun tadi. 2.1 Pemasangan di Windows. Jika anda menggunakan XAMPP sila ikut langkah di bawah: Pergi ke fail zip cakephp yang anda muat turun tadi. Ekstrak dan copy direktori cakephp ke direktori htdocs . Contoh: C:xampphtdocscakephpß Direktori Cake anda atau C:xampphtdocscakephp-2.5.7 ß Direktori Cake anda Jika anda menggunakan WAMP sila ikut langkah di bawah: Pergi ke fail zip cakephp yang anda muat turun tadi. Ekstrak dan copy direktori cakephp ke direktori www . Direktori Penerangan app Fail aplikasi anda lib Kod sumber atau enjin CakePHP tersimpan disini. plugins Untuk menyimpan CakePHP plugins vendors Untuk menyimpan third-party PHP Libraries
  • 7. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       7   Contoh: C:wampwwwcakephpß Direktori Cake anda atau C:wampwwwcakephp-2.5.7 ß Direktori Cake anda Jika anda menggunakan pakej server selain dari yang diatas,anda cuma perlu mencari document root directory server anda dan copy & paste direktori cakephp tadi. 2.2 Pemasangan di Linux. Pergi ke fail zip cakephp yang anda muat turun tadi. Ekstrak dan copy direktori cakephp ke direktori Document Root . Contoh: RHEL/Fedora/Centos: /var/www/html/cakephpß Direktori Cake anda Debian/Ubuntu : /var/www/cakephp ß Direktori Cake anda 2.3 Pemasangan di OSX. Jika anda pengguna XAMPP sila ikut langkah di bawah: Pergi ke fail zip cakephp yang anda muat turun tadi. Ekstrak dan copy direktori cakephp ke direktori htdocs. Contoh: /Applications/XAMPP/htdocs/cakephp ß Direktori Cake anda Jika anda menggunakan pakej server selain dari yang diatas,anda cuma perlu mencari document root directory server anda dan copy & paste direktori cakephp tadi.
  • 8. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       8   3. Pemasangan CakePHP Console & Shell Kelebihan CakePHP Framework bukan sahaja untuk digunakan sebagai web framework tetapi ia juga boleh digunakan untuk membina Console Application.Kelebihan konsol ini adalah seperti mengendalikan pelbagai tugasan seperti penyelenggaraan, dan menjana kod sumber untuk HTTP request & response cycle. Shell-shell yang terdapat di dalam aplikasi konsol ini antaranya adalah bake,acl,api,i18n,schema,dan banyak lagi.Anda juga boleh membina shell anda sendiri kelak. Peringatan! Untuk menggunakan CakePHP Console & Command , anda perlu memasang PHP CLI terlebih dahulu. Rujuk: http://www.php-cli.com/ Cara memasang Cake Console CLI . 3.1 Windows 1.Pergi ke Start à Control Panel à System and Security à Advanced system settings à Advanced à Enviroment Variables à cari PATH dan klik Edit. 2. Anda perlu menambah path ke direktori CakePHP yang anda muat turun tadi ke Variable Value. Contoh path yang akan ditambah: C:xampphtdocscakephp-2.5.7libCakeConsole. Contoh gambar:
  • 9. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       9   3.2 Linux 1.Buka terminal dan jalankan arahan(command) ini: ~$ vi ~/.bashrc 2. Tambahkan kod ini : export PATH="$PATH:/var/www/html/cakephp/lib/Cake/Console" atau export PATH="$PATH:/var/www/cakephp/lib/Cake/Console" Contoh gambar:
  • 10. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       10   3.3 OSX 1.Buka terminal dan jalankan arahan(command) ini: ~$ vi ~/.bashrc atau ~$ vi ~/.bash_profile 2. Tambahkan kod ini : export PATH="$PATH:/var/www/html/cakephp/lib/Cake/Console" atau export PATH="$PATH:/var/www/cakephp/lib/Cake/Console" Contoh gambar:
  • 11. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       11   Untuk mengetahui samada cake console berjaya dipasang pada variable path,jalankan command berikut: cake Contoh paparan Cake console .
  • 12. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       12   4. Membina sebuah aplikasi CakePHP – Sistem Pengurusan Projek. Kita akan membina sebuah aplikasi web iaitu Sistem Pengurusan Projek atau Project Management System. Ciri-ciri dan fungsi yang ada pada sistem adalah: I. Menambah,kemaskini, dan menghapus Projek. II. Membuat perhubungan antara ahli(Users) untuk setiap satu projek. III. Seorang ahli akan mempunyai banyak projek. IV. Satu projek akan mempunyai banyak ahli yang menyertai. V. Fungsi Log keluar & Log masuk (Login & Logout Function) Untuk modul panduan ini,kita akan menggunakan kelebihan CakePHP Console & Shell untuk mencipta prototaip aplikasi CakePHP ini dengan lebih pantas dan berkualiti.
  • 13. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       13   5. Menjana struktur aplikasi menggunakan Cake Bake Console. CakePHP Bake Console adalah satu lagi usaha untuk mencipta aplikasi CakePHP dengan pantas.Bake dapat membina satu aplikasi yang boleh terus berfungsi dalam masa beberapa minit sahaja. Bake console akan mencipta fail untuk model,view dan controller beserta kod sumber fungsi asas seperti index,view,add,edit,dan delete di dalam controller. Untuk menjana atau mencipta struktur aplikasi Cake menggunakan Bake Console,sila taip arahan di bawah di terminal/cmd anda. cake bake Paparan seperti dibawah akan muncul * *Sila pastikan anda berada di dalam document root server yang betul. Contoh: Jika anda menggunakan Linux,anda perlu berada di /var/www/html/ atau /var/www/. Jika anda menggunakan XAMPP di OSX,anda perlu berada di /Applications/XAMPP/htdocs/. Jika anda menggunakan XAMPP di windows,anda perlu berada di C:xampphtdocs. Ikut arahan di bawah ini untuk langkah seterusnya. S = Soalan J = Jawapan S:  What is the path to the project you want to bake?
  • 14. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       14   J: Jika anda menggunakan Linux/OSX,sila letakkan nama aplikasi yang anda mahu. Untuk modul panduan ini saya menggunakan nama pms untuk aplikasi pengurusan projek ini. S: J: Taip “y” untuk yes. Tukar lokasi direktori anda sekarang dan masuk ke direktori aplikasi yang baru kita cipta tadi iaitu direktori pms cd pms lihat senarai direktori dan fail dengan menggunakan arahan ini. Linux/OSX ls –la Windows dir Hasilnya adalah seperti di bawah ini:
  • 15. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       15   Penerangan struktur direktori dan fail. Nota peringatan ! Jika anda sudah mempunyai direktori aplikasi, anda harus menggunakan Cake Console & Command didalam direktori aplikasi anda.Sebagai contoh,jika direktori aplikasi anda bernama “pms”,anda perlu menjalankan arahan cake bake didalam direktori “pms” bukan di luar dari direktori “pms”. Direktori Penerangan Config Menyimpan (beberapa) fail konfigurasi CakePHP , maklumat sambungan pangkalan data,dan beberapa fail yang penting. Console Mengandungi arahan dan tugas untuk Cake Console & Shell. Controller Mengandungi fail controller untuk aplikasi anda Index.php Fail untuk bootstrapping aplikasi anda. Lib Mengandungi libraries yang bukan dari 3rd parties vendor. Locale Menyimpan baris bahasa untuk tujuan pelbagai bahasa dalam satu aplikasi . Model Mengandungi fail model untuk aplikasi anda Plugin Pakej plugin disimpan disini. Test Menyimpan fail test case dan test fixtures untuk tujuan unit test ke atas aplikasi anda tmp Disini CakePHP menyimpan data sementara(temporary data) seperti error log,cookies,session,dll. Vendor 3rd parties class atau libraries disimpan disini View Mengandungi fail view untuk aplikasi anda webroot Menyimpan fail CSS,Javascript,Image,dll. .htaccess Untuk melakukan apache url rewriting.
  • 16. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       16   5.1 CakePHP Skema & Model. Kelebihan model didalam cakephp adalah ia kemampuan model membuat perhubungan dan pemetaan objek atau Object Relational Mapping(ORM). Untuk melakukan perhubungan ini,kita perlu menggunakan penyatuan model (Association). Jenis Perhubungan (Relationship Type) Perhubungan (Relationship) Jenis Penyatuan (Association Type) Contoh one to one hasOne Satu pengguna sistem mempunyai satu projek. one to many hasMany Satu projek mempunyai banyak ahli. many to one belongsTo 10 projek mempunyai satu ahli. many to many hasAndBelongsToMany(HABTM) 10 projek mempunyai 10 ahli dan sebaliknya. Untuk aplikasi pengurusan projek ini kita akan menggunakan perhubungan belongsTo,dan hasMany.Perhubungan model ini adalah seperti berikut: Projects hasMany Project Applicants Users hasMany ProjectApplicants Project Applicants belongsTo Projects Project Applicants belongsTo Users Table yang perlu ada :- projects : untuk menyimpan data projek. users : untuk menyimpan data pengguna/ahli. project_applicants : untuk menyimpan data ahli yang menyertai projek.
  • 17. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       17   Rujuk gambarajah dibawah untuk memahami ERD pangkalan data aplikasi ini. Entity Relationship Diagram(ERD) untuk aplikasi Pengurusan Projek.
  • 18. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       18   Untuk membina table pangkalan data tadi. Sila copy skrip arahan MySQL di bawah & paste ke MySQL DBA Tool yang anda gunakan contohnya phpmyadmin: CREATE TABLE `projects` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `name` varchar(255) NOT NULL DEFAULT '', `details` varchar(255) NOT NULL DEFAULT '', `start_date` datetime NOT NULL, `end_date` datetime NOT NULL, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; CREATE TABLE `project_applicants` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `project_id` int(11) NOT NULL, `user_id` int(11) NOT NULL, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, `created_by` int(11) DEFAULT NULL, `modified_by` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `users` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `username` varchar(255) NOT NULL DEFAULT '', `role` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; Anda juga boleh mencipta skema data dengan menggunakan php skrip. Caranya adalah dengan mencipta satu fail schema.php didalam direktori Config/Schema.
  • 19. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       19     Skrip fail Config/Schema/schema.php. <?php class AppSchema extends CakeSchema { public function before($event = array()) { return true; } public function after($event = array()) { } public $project_applicants = array( 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => true, 'key' => 'primary'), 'project_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false), 'user_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false), 'created' => array('type' => 'datetime', 'null' => true, 'default' => null), 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null), 'user_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false), 'indexes' => array( 'PRIMARY' => array('column' => 'id', 'unique' => 1) ), 'tableParameters' => array('charset' => 'latin1', 'collate' => ' latin1_swedish_ci', 'engine' => 'InnoDB') ); public $projects = array( 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => true, 'key' => 'primary'), 'name' => array('type' => 'string', 'null' => false, 'collate' => 'latin1_swedish_ci', 'charset' => 'latin1'), 'details' => array('type' => 'string', 'null' => false, 'collate' => 'latin1_swedish_ci', 'charset' => 'latin1'), 'start_date' => array('type' => 'datetime', 'null' => false, 'default' => null), 'end_date' => array('type' => 'datetime', 'null' => false, 'default' => null), 'created' => array('type' => 'datetime', 'null' => true, 'default' => null), 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null), 'user_id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => false),
  • 20. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       20     'indexes' => array( 'PRIMARY' => array('column' => 'id', 'unique' => 1) ), 'tableParameters' => array('charset' => 'latin1', 'collate' => 'latin1_swedish_ci', 'engine' => 'InnoDB') ); public $users = array( 'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'unsigned' => true, 'key' => 'primary'), 'name' => array('type' => 'string', 'null' => false, 'collate' => 'latin1_swedish_ci', 'charset' => 'latin1'), 'username' => array('type' => 'string', 'null' => false, 'collate' => 'latin1_swedish_ci', 'charset' => 'latin1'), 'password' => array('type' => 'string', 'null' => false, 'collate' => 'latin1_swedish_ci', 'charset' => 'latin1'), 'created' => array('type' => 'datetime', 'null' => true, 'default' => null), 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null), 'indexes' => array( 'PRIMARY' => array('column' => 'id', 'unique' => 1) ), 'tableParameters' => array('charset' => 'latin1', 'collate' => 'latin1_swedish_ci', 'engine' => 'InnoDB') ); }
  • 21. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       21   5.2 Cara untuk membina skema pangkalan data menggunakan Cake Schema Console. Schema shell berfungsi untuk membina skema objek dan juga skema MySQL dump. Schema shell juga boleh digunakan untuk mengemaskini atau mengubah skema pangkalan data.Rujuk http://book.cakephp.org/2.0/en/console-and-shells/schema-management-and-migrations.html Untuk mengetahui arahan-arahan yang ada didalam Schema Console,gunakan arahan ini cake schema Paparan seperti dibawah akan muncul Sebentar tadi anda telah mencipta fail schema.php, oleh itu gunakan arahan dibawah ini untuk membina skema objek di pangkalan data MySQL . cake schema create Hasil daripada arahan di atas adalah,ia akan mencipta table di pangkalan data MySQL.
  • 22. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       22   Jadual dibawah menerangkan kegunaan arahan Schema Console. Arahan Fungsi view Memaparkan kandungan fail skema. generate Menjana skema berdasarkan model yang dicipta . Untuk memproses kesemua data yang ada didalam table sql gunakan parameter –f . dump Menjana/mencipta SQL dump fail. contoh : schema.sql. create Memadam dan menjana semula skema berdasarkan fail skema yang dicipta. update Mengubah table data berdasarkan fail skema yang dicipta. Contoh pangkalan data MySQL yang telah dicipta dan dibuka menggunakan perisian Sequel Pro.
  • 23. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       23   5.3 Penyambungan pangkalan data MySQL menggunakan Cake Bake Console (MYSQL & CakePHP Connection). Untuk membuat penyambungan antara MySQL dan CakePHP dengan mudah,anda boleh menggunakan arahan cake bake. Pastikan anda berada didalam direktori aplikasi anda iaitu direktori pms & jalankan arahan cake bake sekali lagi. S = Soalan J = Jawapan S: J: Tekan “enter” .Kita akan gunakan tetapan default . S: J: Tekan “enter”. Kita akan gunakan MySQL untuk datasource/database. S:  Persistent Connection? J: Taip “y” jika hendak mengaktifkan,Tekan “enter” jika tidak. S: Database Host J: Tekan “enter” jika localhost,isikan host anda jika ia berlainan dari localhost. S:Port? J: Taipkan nombor MySQL jika anda menggunakan port untuk melakukan penyambungan MySQL,Tekan “enter” jika tidak. S: User J: Taipkan nama pengguna(username) MySQL anda,jika ia adalah “root” tekan “enter”. S: Password J: Taipkan kata laluan(password) MySQL anda,jika tiada tekan “enter” dan taip “y” untuk soalan seterusnya. S: Database Name J: Taipkan nama pangkalan data yang kita cipta tadi iaitu “pms” S: Table Prefix?
  • 24. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       24   J: Taipkan nama table prefix jika anda mahu. S: Table encoding J: Taipkan nama table encoding jika anda mahu ubah. S: J: Taip “y” jika anda berpuashati,taip “n” jika anda ingin mengulangi proses semula. S:  Do you wish to add another database configuration? J: Taip “y” jika anda mahu menambah penyambungan pangkalan data,tekan “enter” jika tidak. Untuk mengetahui sama ada penyambungan tadi berjaya atau tidak,buka browser dengan url ini, http://localhost/pms
  • 25. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       25   Jika anda mendapat mesej seperti ini, Bermakna anda mempunyai masalah dengan penyambungan yang dibuat sebentar tadi. Anda boleh melakukan pengubahan tetapan dengan membuka fail database.php di dalam direktori Config/Schema/database.php Rujuk gambar jika kurang faham. Anda perlu menambah variable ‘unix_socket’ ke dalam $default = array() dan tetapkan nilainya . Contoh: public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'root', 'password' => 'admin321', 'database' => 'pms', 'unix_socket' => '/var/mysql.sock', //unix socket );
  • 26. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       26   6 .Menjana kod sumber (Source Code) menggunakan Cake Bake Console. 6.1 Penerangan Interactive Bake Shell. Arahan Fungsi cake bake db_config Membuat tetapan untuk konfigurasi pangkalan data cake bake model Menjana kod sumber untuk model yang akan mengandungi validation & association. cake bake view Menjana kod sumber HTML untuk paparan pengguna. cake bake controller Menjana kod sumber untuk model yang akan mengandungi fungsi seperti index,view,add,edit, dan delete. cake bake project Untuk membina struktur aplikasi CakePHP yang baru. cake bake fixture Untuk menjana kod sumber untuk test fixture. cake bake test Untuk menjana kod sumber untuk CakePHP unit test. cake bake plugin plugin_name Menjana kod sumber untuk plugin mengikut struktur direktori CakePHP cake bake all Menjana kod sumber untuk model,view,controller,test, sekaligus.
  • 27. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       27   6.2 Menjana kod sumber untuk Model,View & Controller. Pastikan anda berada di dalam direktori aplikasi anda iaitu “pms”. Sekarang taipkan arahan di bawah. cake bake all Paparan seperti dibawah ini akan keluar Sekarang apa yang perlu anda lakukan adalah,masukkan nombor mengikut urutan.Kita akan bake ProjectApplicant dahulu. Jadi masukkan nombor 1 pada terminal/cmd. Anda akan mendapat paparan seperti ini apabila ia console bake berjaya menjana kod sumber untuk Model,View & Controller.Rujuk gambar.
  • 28. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       28   SFail view yang telah dicipta Proses bake selesai untuk ProjectApplicant. Seterusnya, untuk bake model Project & User, anda cuma perlu mengulangi langkah di atas. Untuk mengetahui sama ada cake menjana & mencipta kod sumber tadi,kita buka folder Model,View & Controller SFail model yang telah dicipta SFail controller yang telah dicipta  
  • 29. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       29   Kita akan cuba menambah user ke dalam sistem kita dengan membuka url http://localhost/pms/users/add. Paparan seperti dibawah ini akan muncul. Sila cuba tambah user dan submit. Kemudian ia akan membawa kita ke url http://localhost/pms/users dan menyenaraikan users yang ada didalam pangkalan data. Sekarang ini anda sudah pun mempunyai kod sumber asas untuk sistem pengurusan projek ini. Jika anda buka fail Controller/UsersController.php,anda akan melihat fungsi index,view,add,edit dan delete sudah terbina.Fungsi inilah yang memainkan peranan untuk mengawal perjalan sistem anda. Jika anda buka fail Model/User.php,anda akan melihat validation rules & association telah terbina dan ia akan mengawal bisnes logik aplikasi anda. Jika anda buka fail View/Users/index.ctp,anda akan melihat kod HTML bersama PHP yang digunakan untuk memapar data dari pangkalan data.Disini jugalah anda akan menghias dan mereka bentuk paparan antaramuka pengguna(User Interface) sistem anda. Mudah kan?
  • 30. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       30   6.3 Route Routing adalah salah satu kelebihan yang berfungsi untuk mencantikkan url sebuah sistem web. Route dapat menukarkan url anda dari begini: http://localhost/pms/projects/view/1 kepada http://localhost/pms/projek/tunjuk/1 Untuk mengemaskini route,anda perlu melakukannya pada fail Config/route.php.Kesemua route akan dikawal disini. Ok mari kita cuba tukar url untuk bahagian projects pada bahasa melayu. Copy & paste kod dibawah ini ke dalam fail Config/route.php Router::connect('/senarai-projek', array('controller' => 'projects', 'action' => 'index')); Router::connect('/projek/tambah', array('controller' => 'projects', 'action' => 'add')); Router::connect('/senarai-pengguna', array('controller' => 'users', 'action' => 'index')); Router::connect('/pengguna/tambah', array('controller' => 'users', 'action' => 'add')); Router::connect('/senarai-peserta-projek', array('controller' => 'project_applicants', 'action' => 'index')); Router::connect('/peserta-projek/tambah', array('controller' => 'project_applicants', 'action' => 'add'));
  • 31. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       31   7. Membina fungsi log masuk dan log keluar. (Login & Logout with Simple Authentication and Authorization Application) Rujukan : http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html 7.1 Membuat tetapan dan kemaskini. Kita perlu menambah satu lagi field di table users,iaitu field “role”. Untuk melakukan pengubahan ini,kita cuma perlu menambah key dan value seperti dibawah ini pada array $users di dalam fail Config/Schema/schema.php. 'role' => array('type'=> 'string', 'null' => false, 'collate'=> 'latin1_swedish_ci', 'charset'=> 'latin1'), untuk mengemaskini skema pangkalan data yang baru kita tambah tadi,taip arahan di bawah ini pada terminal/cmd. cake schema update skema pangkalan data akan dikemaskini mengikut field table yang kita tambah tadi. Seterusnya,buka fail Model/User.php Tambahkan index array dibawah ini ke dalam array $validate . 'role' => array( 'valid'=> array( 'rule' => array('inList', array('admin', 'staff')), 'message' => 'Sila pilih salah satu jenis pengguna', 'allowEmpty' => false ) ) Rujuk gambar disebelah.
  • 32. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       32   Seterusnya buka fail View/Users/add.ctp dan tambahkan kod dibawah ini selepas kod echo $this->Form->input('password); . echo $this->Form->input('role', array( options' => array('admin' => 'Admin', 'staff' => 'Staff') )); Rujuk gambar dibawah.
  • 33. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       33   7.2 Pengesahan Log Masuk & Log Keluar (Login & Logout Authentication) Kita sekarang sudah boleh bermula untuk membina fungsi pengesahan log masuk dan log keluar untuk sistem pengurusan projek ini. Kita akan menggunakan 2 komponen yang telah terbina bersama CakePHP iaitu: -Komponen Session -Komponen Auth Buka fail Controller/AppController.php dan tambahkan kod dibawah ini ke dalam class AppController. public $components = array( 'Session', 'Auth' => array( 'loginRedirect' => array( 'controller' => 'projects', 'action' => 'index', ), 'logoutRedirect' => array( 'controller' => 'users', 'action' => 'login' ), 'authenticate' => array( 'Form' => array( 'passwordHasher' => 'Blowfish', ) ) ) ); Rujuk gambar di sebelah.
  • 34. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       34   Kita perlu menambah dua fungsi pada UsersController iaitu fungsi login() dan fungsi logout() untuk mengawal perjalanan log masuk dan log keluar sistem ini. Buka fail Controller/UsersController.php dan tambahkan kod dibawah ini pada class UsersController public function login() { if ($this->request->is('post')) { if ($this->Auth->login()) { return $this->redirect($this->Auth->redirectUrl()); } $this->Session->setFlash(__('Maaf ada sila cek semula username & password anda.')); } } public function logout() { return $this->redirect($this->Auth->logout()); } Rujuk gambar di sebelah.
  • 35. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       35   Fungsi login akan mengesan sama ada pengguna telah memasukkan data yang sah atau tidak.Jika data yang diberi adalah sah,ia akan membenarkan pengguna mengakses url yang diminta. Fungsi logout akan memadam sesi (Session) pengguna yang telah mengakses sistem dan terus dibawa keluar dari sistem. Seterusnya kita akan membuat paparan untuk fungsi login. Untuk membuat paparan login,anda perlu membuka direktori View/Users/ .dan cipta satu fail bernama login.ctp.Tambahkan kod dibawah ini pada fail login.ctp tadi. <div class="users form"> <?php echo $this->Session->flash('auth'); ?> <?php echo $this->Form->create('User'); ?> <fieldset> <legend> <?php echo __(‘Sila isikan Username & password’); ?> </legend> <?php echo $this->Form->input('username'); echo $this->Form->input('password'); ?> </fieldset> <?php echo $this->Form->end(__('Login')); ?> </div>
  • 36. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       36   Untuk mengetahui sama ada fungsi ini berjaya atau tidak,sila buka browser dan akses sistem kita. Jika anda berjaya, anda akan mendapat paparan seperti dibawah Seterusnya kita akan menambah hyperlink untuk fungsi logout & login pada header page sistem pms ini. Buka fail View/Layouts/default.ctp,copy kod dibawah ini dan paste ke dalam elemen <header>. <?php $userDetails = $this->Session->read('Auth.User'); if(isset($userDetails)): echo $this->Html->link('Log Masuk',array('controller'=>'users','action'=>'logout')); else: echo $this->Html->link('Log Keluar',array('controller'=>'users','action'=>'logout')); endif; ?>
  • 37. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       37   Maksud kod di atas ialah: $this->Session->read(‘Auth.User’) :Membaca sesi pengguna sistem menggunakan Session Helper. if(isset($userDetails)) : Memeriksa sama ada sesi pengguna wujud atau tidak. Jika sesi pengguna wujud, hyperlink akan bertukar kepada teks “Log Keluar” untuk fungsi Logout. Jika tidak,teks hyperlink akan bertukar kepada “Log Masuk” untuk fungsi login. Jika anda berjaya,paparannya adalah seperti di bawah ini. 7.3 Penggunaan fungsi beforeFilter. Rujukan : http://book.cakephp.org/2.0/en/controllers.html#request-life-cycle-callbacks Fungsi beforeFilter adalah fungsi callback yang telah terbina bersama CakePHP . Apa itu fungsi callback (Callback function) ? Secara ringkas fungsi callback ini adalah fungsi yang akan berjalan selepas fungsi yang dipilih telah dijalankan. Contoh callback: beforeFilter akan berfungsi sebelum fungsi yang ada didalam sesebuah controller dijalankan dan selepas fungsi didalam komponen Auth berjaya dijalankan.
  • 38. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       38   Contoh situasi : Anda membuka sistem anda seperti biasa untuk melihat senarai projek di url http://localhost/pms/projects/index. Akan tetapi,anda telah dibawa ke url http://localhost/pms/users/login . Ini kerana fungsi loginRedirect didalam komponen Auth telah berjalan dan menapis akses anda ke url yang anda minta kerana untuk melihat isi kandungan url http://localhost/pms/projects/index anda perlu log masuk terlebih dahulu. Bagaimana pula jika anda hendak melihat senarai projek tanpa perlu log masuk? Anda hanya perlu menambah kod seperti dibawah ini bersama fungsi beforeFilter ke dalam ProjectsController. Buka fail Controller/ProjectsController.php dan tambah kod dibawah didalam class ProjectsController. public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow('index'); } $this->Auth->allow akan membenarkan fungsi yang dinyatakan didalam parameter allow() berjalan tanpa dihalang oleh Auth.
  • 39. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       39   Dan sekarang anda buka semula url http://localhost/pms/projects/index. Anda sudah boleh melihat senarai projek seperti paparan dibawah ini. Anda boleh menambah seberapa banyak fungsi yang anda mahu penggunaannya diakses tanpa log masuk ke dalam sistem. Contoh kod: public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow('index',’add’,’view’); } Contoh kod diatas akan membenarkan fungsi index,add dan view pada class ProjectsController diakses tanpa pengguna perlu log masuk ke dalam sistem. Mari teruskan dengan membenarkan fungsi login,logout dan add di UsersController
  • 40. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       40   dapat diakses sebelum ditapis oleh Auth komponen.Ini membolehkan pengguna mendaftar/menambah pengguna baru . Tambah kod dibawah ini ke dalam fail Controller/UsersController.php public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow('login', 'logout','add'); } 7.4 Password Hashing. Untuk password hashing kita akan gunakan BlowFishPasswordHasher yang terbina bersama CakePHP 2. Untuk mengetahui lebih lanjut tentang Blowfish Encryption sila rujuk: http://en.wikipedia.org/wiki/Blowfish_%28cipher%29 Untuk menggunakan class BlowFishPasswordHasher kita perlu memanggil class tersebut dengan menggunakan kod dibawah ini ke dalam fail Model/User.php: App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth'); Letak kod diatas selepas kod App::uses('AppModel', 'Model');. Seterusnya tambahkan fungsi callback beforeSave ke dalam model User public function beforeSave($options = array()) { if (isset($this->data[$this->alias]['password'])) { $passwordHasher = new BlowfishPasswordHasher(); $this->data[$this->alias]['password'] = $passwordHasher- >hash( $this->data[$this->alias]['password'] ); } return true; } Sekarang ini,apabila anda menambah pengguna baru,setiap password akan disulitkan dengan beberapa unik karakter yang dipilih secara rawak. Contoh password yang telah menggunakan BlowFishPasswordHasher
  • 41. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       41   7.5 Penapisan akses kandungan mengikut kategori pengguna sistem (Authorization). Sekarang ini,kita akan menambah penapisan bagi setiap pengguna yang akan mengakses sistem ini supaya mereka berada di kawasan yang sepatutnya. Contohnya pengguna di dalam kategori staff tidak dibenarkan untuk edit atau delete projek yang telah dicipta oleh admin. Untuk menjayakan kaedah ini,anda perlu mengubah beberapa kod di model,view,dan controller. Kita akan buat pada satu seksyen dahulu iaitu seksyen projects.Untuk seksyen seterusnya (seksyen users,sekysen project applicants) ,anda cuma perlu mengikuti langkah-langkah dibawah ini semula dan ubah kod mengikut nama controller/model seksyen yang anda ubah. Kita mula dengan mengubah kod di dalam fail View/Projects/add.ctp. Sila buang kod dibawah ini dari fail View/Projects/add.ctp echo $this->Form->input('user_id'); Kemudian buka fail Controller/ProjectsController.php dan tambahkan kod dibawah ini didalam fungsi add. $this->request->data['Project']['user_id'] = $this->Auth->user('id'); Kod fungsi add anda haruslah seperti dibawah ini public function add() { if ($this->request->is('post')) { $this->request->data['Project']['user_id'] = $this->Auth- >user('id'); $this->Project->create(); if ($this->Project->save($this->request->data)) { $this->Session->setFlash(__('Projek berjaya disimpan!')); return $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash(__('Maaf projek tidak berjaya disimpan,sila cuba sekali lagi')); } } $users = $this->Project->User->find('list'); $this->set(compact('users')); }
  • 42. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       42   Fungsi $this->Auth->user() akan membaca data pengguna yang telah log masuk kedalam sistem.Jika anda mengisi parameter id seperti $this->Auth->user(‘id),ia akan mengambil id pengguna tersebut sahaja. Seterusnya buka fail Controller/AppController.php dan tambah kod dibawah ini pada array komponen Auth. 'authorize' => array('Controller') dan tambahkan fungsi isAuthorized() untuk mengesan kategori pengguna yang log masuk ke sistem. public function isAuthorized($user) { // Admin boleh akses semua fungsi if (isset($user['role']) && $user['role'] === 'admin') { return true; } // Jika bukan admin,tidak dibenarkan akses return false; } Kod anda haruslah seperti dibawah ini.Rujuk gambar.
  • 43. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       43   Kita baru sahaja membina mekanisma pengesahan yang mudah dalam masa yang singkat. Dengan ini,pengguna yang didalam kategori admin akan dapat mengakses kesemua lokasi sistem tetapi tidak pada staff. Untuk membenarkan staff atau pengguna lain yang sudah log masuk mengakses pada lokasi tertentu (contoh: http://localhost/pms/projects/add) ,ianya amat mudah.Kita akan gunakan fungsi isAuthorized sekali lagi tetapi pada kali ini kita tambah pada controller Projects. Buka fail Controller/ProjectsController.php dan tambah kod dibawah ini, public function isAuthorized($user) { //akan memberi akses kepada pengguna yang sudah log masuk //supaya dapat menambah projek baru if ($this->action === 'add') { return true; } } Dengan fungsi di atas ini,kita akan membenarkan staff untuk menambah projek baru. Baiklah,mari kita cuba apa yang kita sudah buat. Anda akan mendapat paparan seperti dibawah ini jika anda berjaya.
  • 44. Asas  CakePHP  MVC:  Membina  Aplikasi  Web  (CRUD)  CakePHP  2.     No  Siri:DIR01   ©Hakcipta  Terpelihara  2014       44   Jika anda mengalami sebarang masalah ,anda perlu mengulangi dan mengikut langkah-langkah yang diberi dengan teliti atau anda boleh mendapatkan semua kod sumber untuk sistem ini di github saya di https://github.com/malikperang/pms. Jika anda mengalami masalah dengan konfigurasi database atau konfigurasi CakePHP, Pergi ke https://github.com/malikperang/pms/tree/master/Config. Jika anda mengalami masalah dengan Model, Pergi ke https://github.com/malikperang/pms/tree/master/Model. Jika anda mengalami masalah dengan Controller, Pergi ke https://github.com/malikperang/pms/tree/master/Controller. Jika anda mengalamai masalah dengan View Pergi ke https://github.com/malikperang/pms/tree/master/View. Sila kenalpasti jenis masalah anda dan semak semula panduan ini dengan teliti dan jika anda mahu bertanya secara peribadi boleh e-mail saya di malikperang@gmail.com.