Más contenido relacionado La actualidad más candente (16) Similar a Asas cakephp-mvc (20) Asas cakephp-mvc1.
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.