Buku Pedoman
Selamat datang di Cookbook, dokumentasi CakePHP. Cookbook adalah sistem mirip wiki yang mempersilahkan khalayak umum untuk berkontribusi. Dengan sistem terbuka, kami berharap kualitas, validitas, dan akurasi untuk dokumentasi CakePHP dapat terjaga. Cookbook juga mempermudah semua orang untuk dapat berkontribusi.
Terima kasih sebesar-besarnya kepada AD7six, yang berjasa besar dalam Cookbook melalui pengorbanan waktunya untuk pengembangan, testing and peningkatan aplikasi ini.
# Bagaimana Cookbook bekerja:
- Anda mengunjungi Cookbook dan menemukan kesalahan, sesuatu yang kurang lengkap, sesuatu yang belum dibahas secara keseluruhan, atau sesuatu yang tidak berharga di senarai kita.
- Login ke Cookbook menggunakan akun Bakery Anda.
- Kirim tambahan/suntingan untuk peninjauan (review) dengan menggunakan tag HTML yang valid dan semantik.
- Cek kembali di hari berikutnya untuk melihat apakah perubahan telah disetujui.
- Harap tilik petunjuk berkontribusi ke Cookbook untuk memastikan konsistensitas.
# Penterjemahan
Email John David Anderson (docs at cakephp dot org) atau melalui IRC (#cakephp di freenode dengan nickname _psychic_) untuk berdiskusi mengenai usaha penterjemahan yang diinginkan.
Tip menterjemahkan:
- Jangan menggunakan html entities untuk karater beraksen, Cookbook menggunakan UTF-8.
- Gunakan bentuk informal.
- Terjemahkan judul dan isi pada saat yang bersamaan
- Cari dan sunting isi sesuai dengan bahasa yang akan diterjemahkan - jika tidak maka akan tercatat suntingan bahasa inggris
- Jika tidak terlalu penting, jangan ubah markup atau menambah isi baru - Jika halaman asli memiliki informasi yang kurang, kirim perubahan pada halaman asli dahulu.
- Jika Anda ingin menulis kata dalam bahasa inggris, maka apit dengan tag
<em>. Misal, "asdf asdf Controller asdf" atau "asdf asdf Kontroler (Controller) asfd"
Kami berkomitmen membuat dokumentasi CakePHP lebih baik dari yang telah ada. Kami berharap Anda dapat bergabung dengan kami dengan menggunakan Cookbook dan memberikan sumbangsih balik ke proyek yang telah memberikan banyak manfaat.
1 Memulai CakePHP
Selamat datang di Cookbook, buku pedoman untuk framework aplikasi web CakePHP yang mempermudah proses pengembangan (developing) seperti sepotong kue!
Buku pedoman ini mengasumsikan bahwa Anda memahami PHP dan dasar object-oriented programming (OOP). Buku pedoman ini tidak berusaha menjelaskan secara detail teknologi lainnya (seperti SQL, JavaScript, dan XML) yang terkait dengan fungsionalitas CakePHP, tapi hanya sebatas bagaimana teknologi tersebut digunakan dalam konteks.
1.1 Apa itu CakePHP? Kenapa Menggunakan CakePHP?
CakePHP merupakan sebuah rapid development framework yang gratis dan sumber terbuka untuk PHP. CakePHP merupakan struktur pondasi bagi programer untuk membuat aplikasi web. Tujuan utamanya adalah mempermudah programer bekerja secara terstruktur dan cepat tanpa kehilangan fleksibilitas.
CakePHP membuang proses monoton dalam pengembangan aplikasi web. CakePHP menyediakan semua alat bantu yang diperlukan untuk memulai tugas coding yang perlu diselesaikan: yaitu logika aplikasi. Daripada membuat sesuatu yang baru setiap memulai proyek baru, Anda bisa meninjau unduhan CakePHP dan mulai fokus kepada logik aplikasi yang hendak dibangun.
CakePHP memiliki tim pengembang (developer) dan komunitas yang aktif (membawa nilai tambah ke proyek). Selain menjaga Anda dari melakukan hal yang membuang waktu, penggunaan CakePHP juga berarti inti (core) aplikasi Anda yang sudah teruji dengan baik dan secara periodik terdapat peningkatan/perbaikan.
Berikut ini adalah daftar fitur yang dapat dinikmati apabila menggunakan CakePHP:
- Komunitas yang aktif dan bersahabat
- Lisensi yang fleksibel
- Kompatibel dengan PHP versi 4 dan 5
- Operasi CRUD yang terintegrasi untuk interaksi dengan database
- Scaffolding aplikasi
- Otomatisasi pembuatan code (code generation)
- Arsitektur MVC
- Request dispatcher dengan URL yang kustom, rapih dan adanya route
- Validasi data yang terintegrasi
- Sistem templating yang cepat dan fleksibel (sintaks PHP, tersedia helpers)
- View Helpers untuk AJAX, JavaScript, HTML Forms dan banyak lagi
- Email, Cookie, Keamanan, Session, dan komponen Request Handling
- ACL yang fleksibel
- Sanitasi Data
- Caching yang fleksibel
- Lokalisasi
- Dapat bekerja dari direktori web dimana saja, dengan sedikit atau bahkan tanpa perlu melibatkan konfigurasi Apache
1.2 Dimana Mendapatkan Bantuan
Cookbook
Anda sudah memulai di tempat yang tepat. Buku pedoman ini mungkin dapat menjadi tempat awal untuk menjawab pertanyaan Anda. Seperti proyek sumber terbuka lainnya, CakePHP mendapatkan sukarelawan baru secara regular. Cobalah sebisa mungkin menjawab pertanyaan Anda dengan berusaha sendiri terlebih dulu. Jawaban dapat saja datang terlambat tapi setelah itu akan menetap lama dan Anda nantinya dapat membantu kami menjawab pertanyaan pengguna lainnya.
API
API (Application Programming Interface) CakePHP merupakan dokumentasi yang paling komprehensif mengenai semua detail cara kerja framework yang langsung to the point dan langsung dari pengembang inti (core developers). Merupakan referensi mengenai kode, jadi bawalah topi baling-baling Anda.
Channel IRC
#cakephp @ irc.freenode.net
Jika Anda bingung, sapalah channel IRC CakePHP. Seseorang dari tim pengembangan biasanya berada disana, terutama saat jam-jam siang hari untuk pengguna di bagian utara dan selatan Amerika. Kami ingin sekali mendengar dari Anda, baik itu permintaan bantuan, ingin mencari pengguna CakePHP di wilayah Anda, atau Anda ingin menyumbang mobil balap merk baru.
Bakery
CakePHP Bakery merupakan adalah tempat untuk segala sesuatu yang berhubungan dengan CakePHP. Silahkan tinjau untuk mendapatkan tutorial, studi kasus, dan contoh kode. Jika Anda sudah kenal dengan CakePHP, silahkan masuk dan berbagi pengetahuan dengan komunitas dan raih keberuntungan dan kepopuleran secara instan.
CakeForge
CakeForge merupakan tempat bagi pengembang untuk menaruh proyek CakePHP dan berbagi dengan pengguna CakePHP lainnya. Jika Anda mencari (atau ingin berbagi) komponen yang dahsyat atau plugin yang keren, tinjau CakeForge.
Website resmi CakePHP
Website resmi CakePHP selalu menjadi tempat yang tepat untuk dikunjungi. Anda dapat menemukan senarai ke alat bantu pengembang yang sering digunakan, screencasts, kesempatan untuk menyumbang, dan unduhan.
The Google Group
http://groups.google.com/group/cake-php
CakePHP juga memiliki Google Group yang aktif. Ini dapat menjadi tempat yang tepat untuk mencari jawaban terarchive, FAQ, dan mendapatkan jawaban untuk masalah yang mendesak.
# The Official CakePHP website
The Official CakePHP website is always a great place to visit. It features links to oft-used developer tools, screencasts, donation opportunities, and downloads.
1.2.1 The Cookbook
This manual should probably be the first place you go to get answers. As with many other open source projects, we get new folks regularly. Try your best to answer your questions on your own first. Answers may come slower, but will remain longer–and you'll also be lightening our support load. Both the manual and the API have an online component.
# The Bakery
The CakePHP Bakery is a clearing house for all things CakePHP. Check it out for tutorials, case studies, and code examples. Once you’re acquainted with CakePHP, log on and share your knowledge with the community and gain instant fame and fortune.
# The API
Straight to the point and straight from the core developers, the CakePHP API (Application Programming Interface) is the most comprehensive documentation around for all the nitty gritty details of the internal workings of the framework. Its a straight forward code reference, so bring your propeller hat.
# CakeForge
CakeForge is another developer resource you can use to host your CakePHP projects to share with others. If you’re looking for (or want to share) a killer component or a praiseworthy plugin, check out CakeForge.
# The Test Cases
If you ever feel the information provided in the API is not sufficient, check out the code of the test cases provided with CakePHP 1.2. They can serve as practical examples for function and data member usage for a class. In your CakePHP distribution package the test cases are located under
cake/tests/cases
cake/tests/cases
# The IRC channel
#cakephp @ irc.freenode.net
If you’re stumped, give us a holler in the CakePHP IRC channel. Someone from the development team is usually there, especially during the daylight hours for North and South America users. We’d love to hear from you, whether you need some help, want to find users in your area, or would like to donate your brand new sports car.
# The Google Group
http://groups.google.com/group/cake-php
CakePHP also has a very active Google Group. It can be a great resource for finding archived answers, frequently asked questions, and getting answers to immediate problems.
1.3 Memahami Model-View-Controller
CakePHP mengikuti pola desain MVC. Memprogram menggunakan MVC memisahkan aplikasi menjadi tiga bagian utama:
- Model yang merepresentasikan data aplikasi
- View yang menyajikan presentasi data dari model
- Controller yang menangani dan mengalihkan request dari klien
Gambar 1: Bentuk dasar request MVC
Gambar 1 menunjukkan sebuah contoh dari kerangka request MVC dalam CakePHP. Untuk mengilustrasikan, asumsikan seorang klien bernama Joko telah mengklik taut "Beli buku ini sekarang!" di halaman beranda (home) aplikasi Anda.
- Joko mengklik taut yang merujuk ke http://www.example.com/buku/beli dan peraba (browser) yang digunakannya akan membuat request ke web server Anda.
- Dispatcher mengecek URL request (/buku/beli), dan mengarahkan request tersebut ke controller yang sesuai.
- Controller mengeksekusi logik aplikasi. Misalnya, controller mengecek apakah Joko telah login.
- Controller juga menggunakan model untuk memperoleh data dari aplikasi. Model umumnya merepresentasikan tabel database, tapi model dapat juga merepresentasikan entri LDAP, RSS feeds, atau file pada sistem. Dalam contoh ini, controller menggunakan model untuk mengambil data pembelian terakhir si Joko dari database.
- Setelah memproses data, controller memberikan hasilnya ke view. View mengambil data akhir dan menyiapkannya untuk ditampilkan ke klien. View dalam CakePHP umumnya berupa format HTML, tapi view dapat juga berupa PDF, dokumen XML, atau JSON object (tergantung kebutuhan Anda).
- Saat view selesai menggunakan data yang diberikan controller untuk menghasilkan tampilan, isi dari view tersebut akan dikembalikan ke peraba si Joko.
hampir setiap request ke aplikasi mengikuti pola ini. Kami akan menambahkan detail lainnya pada halaman selanjutnya, yang mana khusus berhubungan dengan CakePHP, jadi ingat hal ini baik-baik sebelum berlanjut ke halaman selanjutnya.
1.3.1 Keuntungan
Kenapa menggunakan MVC? Karena MVC merupakan pola desain perangkat lunak yang tepat dan teruji, yang membuat aplikasi menjadi terjaga, modular, dan berkembang cepat. Mendesain bagian aplikasi menjadi Model, View dan Controller membuat aplikasi lebih kokoh. Fitur baru dapat dengan mudah ditambahkan, dan tampilan baru pada fitur lama merupakan sebuah cuplikan. Desain yang terpisah dan modular membuat pengembang dan desainer dapat bekerja secara serempak, termasuk mempercepat proses prototyping. Pemisahan dengan MVC juga membuat pengembang leluasa melakukan perubahan di suatu bagian tanpa mempengaruhi bagian lainnya.
Jika Anda belum pernah membuat aplikasi dengan cara seperti ini, maka perlu sedikit waktu untuk membiasakannya, tapi kami yakin setelah Anda membuat aplikasi menggunakan CakePHP, Anda tidak akan mau membangun aplikasi dengan cara lain.
2 Prinsip Dasar CakePHP
Awal Mula Menjadi Sebuah Kue yang Cerdas
2.1 Struktur Tata Letak Berkas pada CakePHP
CakePHP tak hanya menyajikan class Controller, Model dan View, tapi CakePHP juga memberikan beberapa class dan object tambahan yang membuat proses pengembangan (development) dalam MVC lebih cepat dan nyaman. Component, Behavior, dan Helper merupakan class-class yang mempermudah penambahan dan penggunaan berulang ke class dasar MVC di dalam aplikasi Anda. Untuk saat ini, kita fokus ke level atas dulu, untuk mengetahui detail penggunaan alat bantu tersebut bisa belakangan.
2.1.1 Ekstensi-ekstensi untuk Controller
Komponen adalah sebuah class bantu dalam logik controller. Jika Anda mempunyai beberapa logik yang ingin digunakan juga oleh controller (atau aplikasi) lain, maka penggunaan komponen sangat tepat. Misal, class inti dari EmailComponent membuat tugas menulis dan mengirim email menjadi lebih mudah. Daripada menulis sebuah method dalam satu controller untuk mengeksekusi logik ini, Anda dapat mempaket logik tersebut sehingga dapat digunakan secara bersama.
Controller juga bisa dipadankan dengan callback. Callback dapat digunakan saat Anda ingin menyisipkan beberapa logik diantara operasi inti CakePHP. Callback yang tersedia diantaranya:
- beforeFilter(), dieksekusi sebelum logik action controller
- beforeRender(), dieksekusi setelah logik controller, tapi sebelum view dirender
- afterFilter(), dieksekusi setelah semua logik controller, termasuk render view. Mungkin tidak ada perbedaan antara afterRender() dan afterFilter() kecuali Anda secara manual membuat prmanggilan ke render() di action controller dan memasukkan beberapa logik setelah pemanggilan tersebut.
2.1.2 Ekstensi-ekstensi untuk View
Helper merupakan class yang membantu operasi logik di view. Seperti halnya component yang digunakan di controller, helper merupakan presentasi dari logik yang dapat diakses dan digunakan bersama oleh beberapa view. Salah satu helper inti, yaitu AjaxHelper, membuat request Ajax dalam view lebih mudah.
Sebagian besar aplikasi memiliki kode view yang digunakan berulang kali. CakePHP memberikan kemudahan penggunaan kode view yang berulang untuk layout dan element. Secara default, setiap view dirender oleh controller akan ditempatkan di dalam sebuah layout. Element digunakan saat ada porsi kecil dari content yang ingin digunakan berulang kali oleh beberapa view.
2.1.3 Ekstensi-ekstensi untuk Model
Hampir sama, Behavior digunakan untuk penggunaan model yang memiliki fungsi yang serupa. Misal, jika Anda menyimpan data user dalam struktur pohon, Anda dapat mendefinisikan model User agar bertingkah layaknya sebuah pohon, dan Anda dapat dengan mudah menghapus, menambahkan, atau menggeser node di struktur pohon Anda.
Models juga didukung oleh class lainnya yang disebut DataSource. DataSource merupakan abstraksi untuk model agar model dapat memanipulasi tipe data yang berbeda secara konsisten. Saat sumber utama data di CakePHP berasal dari database, Anda tetap dapat menulis DataSource tambahan untuk model Anda agar direpresentasikan dalam RSS feed, file CSV, entri LDAP, atau event iCal. Dengan menggunakan DataSource, Anda dapat mengasosiasi record dari sumber data yang berbeda: dibanding hanya terbatas pada SQL join, dengan DataSource Anda dapat menegaskan DataSource bahwa model LDAP Anda terasosiasi dengan banyak event iCal.
Seperti halnya controller, model dilengkapi dengan fitur callback juga:
- beforeFind()
- afterFind()
- beforeValidate()
- beforeSave()
- afterSave()
- beforeDelete()
- afterDelete()
Nama dari method ini sudah cukup menjelaskan fungsi dari penggunaannya. Anda dapat memperoleh detail dari callback di bab model.
2.1.4 Ekstensi-ekstensi untuk Aplikasi
Masing-masing controller, helper dan model mempunyai class induk yang dapat digunakan untuk mendefinisikan perubahan aplikasi secara luas. AppController (terletak di /app/app_controller.php), AppHelper (terletak di /app/app_helper) ,dan AppModel (terletak di /app/app_helper.php) merupakan tempat yang tepat untuk mendefinisikan method yang ingin dipakai beberapa controller, helper dan model sekaligus.
Meskipun bukan berupa class atau berkas, route mempunyai peran dalam membuat request yang di tujukan ke CakePHP. Definsi dalam route menjelaskan bagaimana CakePHP memetakan URL ke action di controller. Konfigurasi default mengasumsikan URL "/controller/action/var1/var2" akan memanggil Controller::action($var1, $var2), tapi dengan mengkonfigurasi route Anda bisa mengkustom URL serta bagaimana URL tersebut dibaca oleh aplikasi.
Beberapa fitur dalam sebuah aplikasi dapat dipaketkan secara keseluruhan. Plugin merupakan paket dari model, controller dan view yang dapat di gunakan oleh beberapa aplikasi untuk mengerjakan tujuan khusus. Sistem manajemen pengguna atau blog sederhana merupakan contoh tepat untuk plugin di CakePHP.
2.2 Bentuk Umum Request di CakePHP
Kita telah melewati dasar-dasar dalam CakePHP, jadi kita lanjutkan saja ke pembahasan bagaimana setiap obyek bekerja bersama untuk memenuhi sebuah request. Melanjutkan contoh reqeuest sebelumnya, coba bayangkan si Joko baru saja mengklik taut "Beli buku sekarang!" pada aplikasi CakePHP.


Gambar 2. Bentuk Request Cake pada Umumnya.
Hitam = element yang diperlukan, Abu-abu = element opsional, Biru = callback
- Joko mengklik taut ke http://www.example.com/books/beli, dan peraba (browser) si Joko membuat request ke web server Anda.
- Route akan menterjemahkan URL untuk mengekstrak parameter dari request, yaitu: controller, action dan argumen lainnya yang mempengaruhi logik bisnis saat ruquest.
- Dengan menggunakan route, URL yang direquest dipetakan ke action di controller (sebuah method dalam class controller). Dalam kasus ini method beli() di dalam class BooksController. Callback beforeFilter() di controller dipanggil sebelum logic action controller dieksekusi.
- Controller dapat menggunakan model untuk memperoleh data aplikasi. Dalam contoh ini, controller menggunakan model untuk mengambil data pembelian terakhir Joko dari database. Penggunaan model tidaklah diperlukan, tapi semua controller CakePHP secara inisial membutuhkan setidaknya satu model.
- Setelah model memperoleh data, model akan memberikannya ke controller. Callback untuk model dapat dipanggil.
- Controller dapat menggunakan component untuk memanipulasi data atau melakukan operasi lainnya (misal untuk manipulasi session, autentifikasi, atau mengirim email).
- Saat controller selesai menggunakan model dan component untuk menyiapkan data, controller dapat memberikan data tersebut ke view dengan pemanggilan method set(). Callback di controller dapat dieksekusi sebelum data dikirim. Kemudian logik di view dieksekusi, element dan/atau helper dapat disertakan (include). Secara default, view dirender di dalam layout.
- Kemudian callback controller tambahan (seperti afterFilter()) dapat dipanggil. Setelah itu kode view yang dirender diberikan ke peraba si Joko.
2.3 Struktur Berkas (File) di CakePHP
Mari kita lihat seperti apa CakePHP terlihat di luar kotak. Anda sudah mengetahui CakePHP dari bentuk request MVC nya, tapi Anda perlu mengetahui juga bagaimana berkas-berkas dalam CakePHP terorganisir.
- app
- cake
- docs
- index.php
- vendors
Saat Anda mengunduh CakePHP, Anda akan melihat 4 pelipat (folder). Pelipat app merupakan tempat mengerjakan sulap: yaitu tempat berkas-berkas aplikasi Anda ditempatkan. Pelipat cake adalah tempat dimana sulap terjadi. Berkomitmenlah untuk tidak menyunting berkas-berkas di pelipat ini. Kami tidak dapat membantu jika Anda telah memodifikasi inti CakePHP. Pelipat docs adalah tempat informasi penting seperti readme, changelog, dan lisensi. Dan terakhir, pelipat vendors yang merupakan tempat pustaka pihak ketiga (third-party library) yang digunakan dalam aplikasi CakePHP Anda.
2.3.1 Pelipat App
Pelipat app dalam struktur berkas CakePHP merupakan tempat dimana Anda akan sering mengerjakan aplikasi Anda. Mari kita lihat ke dalam pelipat app.
| config | Tempat berkas konfigurasi CakePHP. Berkas tata koneksi database, bootstrapping, konfigurasi inti dan lainnya sebaiknya ditempatkan disini. |
|---|---|
| controllers | Berisi controller dan component aplikasi Anda. |
| locale | Tempat menyimpan berkas string untuk internasionalisasi. |
| models | Berisi model, behavior dan datasource aplikasi Anda. |
| plugins | Berisi paket plugin. |
| tmp | Tempat menyimpan data sementara. Data sebenarnya yang disimpan tergantung pada bagaimana Anda mengkonfigurasi CakePHP, tapi umumnya pelipat ini digunakan untuk menyimpan deskripsi model, log, dan terkadang informasi session. |
| vendors | Class atau pustaka pihak ketiga sebaiknya ditempatkan di pelipat ini. Dengan begitu, Anda dapat mudah mengkasesnya menggunakan fungsi App::import('vendor', 'nama'). Jika diperhatikan lebih seksama hal ini terlihat redundan, karena pelipat folder juga terdapat di tingkat atas struktur direktori CakePHP. Kita akan mendapatkan perbedaan diantara keduanya saat pembahasan manajemen multi aplikasi dan tata (setup) sistem yang lebih kompleks. |
| views | Berkas untuk tampilan ditempatkan disini: berkas-berkas element, halaman galat (error page), helper, layout dan view. |
| webroot | Dalam tata produksi, pelipat ini merupakan tempat document root aplikasi Anda. Pelipat di dalamnya juga merupakan tempat untuk berkas CSS stylesheet, gambar (images), dan JavaScript. |
2.4 Konvensi CakePHP
Kami adalah penggemar konvensi di atas konfigurasi. Walaupun dibutuhkan waktu untuk mempelajari konvensi CakePHP, Anda telah menghemat waktu untuk perjalanan jauh ke depan: dengan mengikuti konvensi, Anda telah mendapatkan fungsionalitas, dan Anda membebaskan diri Anda dari mimpi buruk melacak berkas konfigurasi. Konvensi membuat sistem pengembangan menjadi seragam sehingga pengembang lain dapat dengan mudah menelusuri dan membantu.
Konvensi CakePHP telah digunakan selama beberapa tahun sebagai pengalaman dan aturan terbaik untuk pengembangan web. Kami menyarankan Anda menggunakan konvensi ini saat melakukan pengembangan dengan CakePHP, tapi banyak prinsip-prinsip konvensi ini yang dapat dengan mudah dioverride - biasanya saat Anda bekerja dengan sistem peninggalan pengembang lain.
2.4.1 Konvensi Nama Berkas dan Class
Secara umum, nama berkas menggunakan garis bawah (underscore) sedangkan nama class menggunakan CamelCase. Misal, class KissesAndaHugsController dapat ditemukan di dalam berkas kisses_and_hugs_controller.php.
Nama class dalam suatu berkas tidaklah harus nama yang serupa dengan nama berkas. Misal, class EmailComponent terdapat di dalam berkas email.php, dan class HtmlHelper terdapat di dalam berkas bernama html.php.
2.4.2 Konvensi Model dan Database
Nama class dari model ditulis CamelCase dan singular. Contoh penamaan class model: Person, BigPerson dan ReallyBigPerson.
Nama tabel untuk model CakePHP ditulis dengan underscore dan plural. Nama tabel untuk model pada contoh di atas adalah people, big_people, dan really_big_people.
Foreign key dalam hubungan asosiasi hasMany, belongsTo atau hasOne secara default dikenali oleh CakePHP dengan nama model terkait (dalam bentuk singular) diikuti dengan _id. Jadi jika baker hasMany cakes, tabel cakes akan merujuk baker dalam tabel bakers melalui foreign key baker_id.
Tabel join yang digunakan dalam relasi hasAndBelongsToMany (HABTM) antara beberapa model sebaiknya diberi nama tabel model yang dijoin secara alpabet (misal apples_zebras, bukan zebras_apples).
Semua tabel model dalam CakePHP yang saling berinteraksi (kecuali tabel join) membutuhkan primary key singular untuk menidentifikasi setiap row secara unik. Jika Anda menginginkan model tabel yang tidak memiliki field primary key, seperti row dari join table posts_tags, konvensi CakePHP adalah ada satu field primary yang ditambahkan ke tabel.
2.4.3 Konvensi Controller
Nama class controller berbentuk plural, CamelCase, dan diakhiri dengan Controller. Contoh konvensi penamaan controller adalah PeopleController dan LatestArticlesController.
Fungsi pertama yang mungkin ditulis adalah fungsi index(). Saat ada request dengan menyertakan controller tanpa parameter action, CakePHP secara default akan mengeksekusi fungsi index() di controller tersebut. Misal, request ke http://www.example.com/apples/ akan memanggil fungsi index() di controller ApplesController, sedangkan request ke http://www.example.com/apples/view/ akan memanggil fungsi view() di controller ApplesController.
Anda juga dapat mengubah akses fungsi di controller dengan menyisipkan underscore di awal nama fungsi tersebut. Jika nama fungsi di controller diawali dengan underscore, maka fungsi tersebut tidak dapat diakses secara langsung dari web melainkan hanya melalui pemanggilan internal. Contohnya:
<?php
class NewsController extends AppController {
function latest() {
$this->_findNewArticles();
}
function _findNewArticles() {
//Logic to find latest news articles
}
}
?>
<?phpclass NewsController extends AppController {function latest() {$this->_findNewArticles();}function _findNewArticles() {//Logic to find latest news articles}}?>
Pertimbangan URL untuk Nama Controller
Sebagaima telah Anda lihat, nama controller dengan satu kata akan merujuk ke path URL dengan huruf kecil. Misal, ApplesController (didefinisikan dalam berkas 'apples_controller.php') dapat diakses melalui http://example.com/apples.
Nama controller yang lebih dari satu kata menggunakan konvensi camelCase dengan bentuk plural untuk URLnya. Misal, RedApplesController (red_apples_controller.php) akan merujuk ke http://example.com/redApples dan OperatingSystemsController (operating_systems_controller.php) akan merujuk ke http://example.com/operatingSystems.
2.4.3.1 Kaitan URL terhadap Penamaan Controller
Sebagaimana Anda lihat, penamaan controller dengan satu kata secara mudah dipetakan ke path URL dalam bentuk lower case. Contohnya, ApplesController (yang mungkin didefinisikan dalam berkas 'apples_controller.php') dapat diakses melalui http://example.com/apples.
Nama controller yang terdiri lebih dari satu kata dipetakan ke URL secara camelCased dengan bentuk plural. Contohnya, RedApplesController (red_apples_controller.php) akan dipetakan ke http://example.com/redApples dan OperatingSystemsController (operating_systems_controller.php) akan dipetakan ke http://example.com/operatingSystems.
2.4.4 View Conventions
View template files are named after the controller functions they display, in an underscored form. The getReady() function of the PeopleController class will look for a view template in /app/views/people/get_ready.ctp.
The basic pattern is /app/views/controller/underscored_function_name.ctp.
By naming the pieces of your application using CakePHP conventions, you gain functionality without the hassle and maintenance tethers of configuration. Here’s a final example that ties the conventions
- Database table: "people"
- Model class: "Person", found at /app/models/person.php
- Controller class: "PeopleController", found at /app/controllers/people_controller.php
- View template, found at /app/views/people/index.ctp
Using these conventions, CakePHP knows that a request to http://example.com/people/ maps to a call on the index() function of the PeopleController, where the Person model is automatically available (and automatically tied to the ‘people’ table in the database), and renders to a file. None of these relationships have been configured by any means other than by creating classes and files that you’d need to create anyway.
Now that you've been introduced to CakePHP's fundamentals, you might try a run through the CakePHP Blog Tutorial to see how things fit together.
3 Pengembangan dengan CakePHP
Sekarang Anda membuat kue.
3.1 Hal - hal yang dibutuhkan
- HTTP Server. Apache dengan mod_rewrite lebih dianjurkan, tapi tidak wajib.
- PHP 4.3.2 atau versi di atasnya. Ya, CakePHP dapat berfungsi di PHP 4 dan 5.
Secara teknis database engine tidak dibutuhkan, tapi kami rasa kebanyakan aplikasi membutuhkannya. CakePHP mendukung beragam database storage engine:
- MySQL (4 atau versi di atasnya)
- PostgreSQL
- Firebird DB2
- Microsoft SQL Server
- Oracle
- SQLite
- ODBC
- ADOdb
3.2 Persiapan Instalasi
3.2.1 Mendapatkan CakePHP
Ada dua cara untuk mendapatkan salinan terbaru CakePHP. Pertama, Anda dapat mengunduh arsip dalam format kompresi (zip/tar.gz/tar.bz2), atau Anda dapat melakukan check out kode langsung dari repositori (SVN) kami.
Untuk mendapatkan salinan terbaru, kunjungi web site kami di http://www.cakephp.org. Klik taut “Download Now!” yang besar itu. Unduhan CakePHP dihost di CakeForge, dan Anda dapat juga mengunjungi web site proyek - proyek seputar CakePHP di http://cakeforge.org/projects/cakephp.
Jika Anda ingin bekerja dengan kode terbaru, silahkan cek unduhan malaman (nightly build) kami di http://cakephp.org/downloads/index/nightly. Kode malaman CakePHP adalah kode yang stabil, dan meliputi perbaikan antar rilis.
Untuk mengambil salinan terbaru dari repositori SVN kami, terhubunglah ke https://svn.cakephp.org/repo/branches/1.2.x.x .
3.2.2 Hak Akses
CakePHP mwnggunakan direktori /app/tmp untuk sejumlah operasi yang berbeda. Beberapa contohnya antara lain : deskripsi model, cache view, dan infomasi session.
Dengan demikian, pastikan direktori /app/tmp di instalasi cake Anda dapat ditulisi oleh user web server.
3.3 Instalasi
Menginstal CakePHP bisa saja semudah menempatkannya di document root web server Anda, tetapi bisa juga menjadi sekompleks dan sefleksibel yang Anda inginkan. Pada bagian ini akan dibahas tiga tipe instalasi CakePHP: pengembangan (development), produksi, dan mahir (advance).
- Pengembangan (Development): cara instalasi yang mudah, URL aplikasi meliputi nama direktori tempat instalasi CakePHP, dan tidak cukup aman.
- Produksi: Memerlukan akses untuk mengkonfigurasi document root web server, URL yang rapih, sangat aman.
- Mahir (Advance): Dengan beberapa konfigurasi, Anda dapat menempatkan direktori-direktori penting CakePHP ke beberapa bagian filesystem yang berbeda, sehingga memungkinkan satu direktori inti CakePHP digunakan oleh banyak aplikasi CakePHP.
3.3.1 Development
Tempatkan instalasi cake di dalam document root web server Anda. Misal, asumsikan document root web server Anda adalah /var/www/html, tata letak direktori akan terlihat di filesystem seperti ini:
- /var/www/html
- /cake_1_2
- /app
- /cake
- /docs
- /index.php
- /vendors
- /cake_1_2
Untuk melihat aplikasi CakePHP Anda, arahkan perambah (browser) Anda ke http://www.example.com/cake_1_2/
3.3.2 Produksi
Untuk menggunakan tata produksi, Anda membutuhkan hak akses untuk merubah document root web server Anda. Memilih penggunaan tata produksi berarti keseluruhan domain berlaku sebagai satu aplikasi CakePHP.
Tata produksi menggunakan layout seperti berikut:
- /path_ke_instalasi_cake/
- /app
- /webroot (direktori ini di set sebagai the document root web server)
- /cake
- /docs
- /index.php
- /vendors
- /app
Jika aplikasi ini akan di hostingkan dalam Apache, direktif DocumentRoot untuk domain kurang lebih terlihat seperti ini:
DocumentRoot /path_ke_instalasi_cake/app/webroot
Untuk melihat aplikasi CakePHP Anda, arahkan peraba Anda ke http://www.example.com.
3.3.3 Instalasi Advance
Ada beberapa situasi dimana Anda ingin menempatkan direktori CakePHP pada tempat yang berbeda pada filesystem. Mungkin dikarenakan oleh keterbatasan pada host berbagi, atau Anda hanya menginginkan sebagian kecil aplikasi Anda berbagi pustaka Cake yang sama. Bagian ini menjelaskan bagaimana menempatkan direktori CakePHP Anda tersebar pada filesystem.
Perlu diketahui, bahwa ada tiga bagian penting dalam aplikasi Cake:
- Pustaka inti CakePHP, di dalam /cake.
- Kode aplikasi Anda, di dalam /app.
- Webroot aplikasi, umumnya di dalam /app/webroot.
Setiap direktori ini dapat ditaruh dimana saja pada file system Anda, dengan pengecualian pada webroot, yang mana harus dapat diakses oleh web server Anda. Anda bahkan dapat memindahkah direktori webroot keluar dari direktori app selama Anda memberitahu Cake dimana lokasinya.
Untuk mengkonfigurasi instalasi Cake Anda, Anda perlu menyunting beberapa perubahan di /app/webroot/index.php. Ada tiga konstanta yang perlu Anda sunting: ROOT, APP_DIR, and CAKE_CORE_INCLUDE_PATH.
- ROOT perlu diset ke path direktori tempat direktori app berada.
- APP_DIR perlu diset ke path direktori app Anda.
- CAKE_CORE_INCLUDE_PATH perlu diset ke path direktori pustaka CakePHP Anda.
Mari kita coba melalui sebuah contoh sehingga Anda dapat melihat seperti apa instalasi advance dalam praktik. Bayangkan jika saya ingin menata CakePHP bekerja seperti berikut:
- Pustaka inti CakePHP akan ditempatkan di /usr/lib/cake.
- Direktori webroot aplikasi saya berada di /var/www/mysite/.
- Direktori app aplikasi saya ditempatkan di dalam /home/me/mysite.
Dengan diberikan tipe penataan ini, saya perlu menyunting berkas webroot/index.php (yang mana berada di /var/www/mysite/index.php, dalam contoh ini) menjadi seperti ini:
// /app/webroot/index.php (partial, comments removed)
if (!defined('ROOT')) {
define('ROOT', DS.'home'.DS.'me');
}
if (!defined('APP_DIR')) {
define ('APP_DIR', 'mysite');
}
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib'.DS.'cake');
}
// /app/webroot/index.php (partial, comments removed)if (!defined('ROOT')) {define('ROOT', DS.'home'.DS.'me');}if (!defined('APP_DIR')) {define ('APP_DIR', 'mysite');}if (!defined('CAKE_CORE_INCLUDE_PATH')) {define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib'.DS.'cake');}
Direkomendasikan untuk menggunakan konstanta DS dibandingkan simbol slash untuk delimeter path berkas. Hal ini mencegah eror dari berkas yang tidak ada akibat salah delimeter, dan hal ini membuat kode Anda lebih portable.
3.3.3.1 Path Class Tambahan
Kadang kala berguna untuk dapat berbagi class-class MVC antar aplikasi pada sistem yang sama. Jika Anda ingin controller yang sama dalam dua aplikasi Anda dapat menggunakan bootstrap.php CakePHP untuk menyediakan class tambahan ini ke view.
Dalam bootstrap.php, definisikan beberapa variabel bernama khusus agar CakePHP tahu tempat lain mencari class-class MVC:
$viewPaths = array(); $controllerPaths = array(); $modelPaths = array(); $helperPaths = array(); $componentPaths = array(); $behaviorPaths = array();
$viewPaths = array();$controllerPaths = array();$modelPaths = array();$helperPaths = array();$componentPaths = array();$behaviorPaths = array();
Setiap variabel khusus ini dapat diset menjadi array dari absolute path filesystem dimana class tambahan dapat ditemukan saat direquest. Pastikan setiap path yang didefinisikan terdapat trailing slash.
3.3.4 Apache dan mod_rewrite
Sementara CakePHP ditulis untuk bekerja dengan mod_rewrite di luar kotak- dan biasanya tanpa masalah-kami mengetahui ada beberapa pengguna berjuang mendapatkan semua itu bekerja secara apik di sistem mereka. Inilah beberapa hal yang perlu Anda coba untuk mendapatkannya bekerja secara tepat:
- Pastikan .htaccess override diperbolehkan. Dalam httpd.conf, Anda perlu memiliki bagian yang mendefinisikan Directory Anda pada server. Pastikan AllowOverride diset ke All untuk DocumentRoot yang sesuai.
- Pastikan Anda menyunting httpd.conf sistem, bukan httpf.conf user- atau site-tertentu.
- Apakah CakePHP tidak menemukan berkas .htaccess yang dibutuhkannya? Hal ini kadang terjadi saat menyalin atau memindahkan karena beberapa sistem operasi memperlakukan berkas dengan awalan '.' sebgai berkas tersembunyi. Pastikan salinan CakePHP Anda berasal dari bagian unduhan di situs atau repsitori SVN kami, dan telah di mekarkan secara benar.
- Pastikan Anda memuat mod_rewrite secara benar. Anda akan mendapatkan sesuatu seperti LoadModule rewrite_module libexec/httpd/mod_rewrite.so (pengguna Linux/Unix perlu juga melihat sesuatu seperti AddModule mod_rewrite.c) dalam httpd.conf Anda. Juga pastikan tidak berupa komentar (dengan penambahan # di awal). Restart Apache untuk memastikan tata conf Anda aktif.
- Jika Anda menginstal CakePHP ke dalam direktori pengguna (http://example.com/~username), Anda perlu mengubah berkas .htaccess dalam base direktori tempat instalasi CakePHP Anda. Cukup tambahkan baris "RewriteBase /~myusername/".
3.3.5 Fire It Up
Baiklah, mari kita lihat CakePHP beraksi. Tergantung pada penataan yang Anda gunakan, Anda perlu mengarahkan perambah Anda ke http://example.com atau http://example.com/cake_instal/. Pada langkah ini, Anda akan melihat default home CakePHP, dan pesan yang memberitahukan status koneksi database Anda saat ini.
Selamat! Anda siap membuat aplikasi CakePHP perdana Anda.
3.4 Konfigurasi
3.4.1 Konfigurasi Database
Di CakePHP detail konfigurasi database disimpan di dalam sebuah file, yaitu di app/config/database.php. Contoh dari file konfigurasi database dapat dilihat di app/config/database.php.default. Sebuah konfigurasi yang sudah benar seharusnya aan terlihat kurang lebih seperti ini :
var $default = array('driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'cakephpuser',
'password' => 'c4k3roxx!',
'database' => 'my_cakephp_project',
'prefix' => '');
var $default = array('driver' => 'mysql','persistent' => false,'host' => 'localhost','login' => 'cakephpuser','password' => 'c4k3roxx!','database' => 'my_cakephp_project','prefix' => '');
Secara default, $default lah yang akan digunakan, kecuali disebutkan lain di dalam $useDbConfig di dalam sebuah model. Sebagai contoh, jika aplikasi saya memiliki database legacy sebagai tambahan yang di default, saya bisa menggunakannya di dalam model dengan membuat koneksi baru ke database $legacy yang array nya kurang lebih sama dengan array $default. Caranya adalah dengan menset var $useDbConfig = `legacy` pada model bersangkutan.
Isilah nilai / pasangan isi di dalam array konfigurasi sesuai kebutuhan anda.
| Key | Value |
|---|---|
| driver | Nama dari driver database yang akan digunakan disini. Examples: mysql, postgres, sqlite, pear-drivername, adodb-drivername, mssql, oracle, or odbc. |
| persistent | Perlu tidaknya menggunakan koneksi secara persistent ke dalam database. |
| host | hostname dari server database (atau alamat IP address nya). |
| login | Username yang digunakan untuk login ke dalam database. |
| password | Password yang digunakan untuk login ke dalam database. |
| database | Nama dari database yang akan digunakan. |
| prefix (optional) | Sebuah String yang digunakan sebagai prefiks dari setiap tabel di dalam database. Jika anda tidak menggunakan prefiks pada nama tabel anda, kosongkan bagian ini. |
| port (optional) | Port TCO atau Unix socket melakukan koneksi ke database server. |
| encoding | Menentukan karakter apa yang digunakan untuk mengirimkan pernyataan SQL ke server. |
| schema | Digunakan pada database PostgreSQL untuk menentukan schema mana yang akan digunakan. |
Setting prefix adalah untuk tabel, bukan model. Sebagai contoh, jika anda membuat tabel join untuk Apple dan Flavor model anda, anda menamakannya prefix_apples_flavors (not prefix_apples_prefix_flavors), dan menset prefix setting menjadi 'prefix_'.
Sampai disini, anda mungkin ingin melihat CakePHP Conventions. Penamaan yang benar untuk table anda (dan penambahkan beberapa kolom) bisa membawa anda ke fungsionalitas yang membebaskan, sehingga anda tidak perlu melakukan konfigurasi. Sebagai contoh, jika anda menamakan tabel database anda big_boxes, model anda BigBox, controller anda BigBoxesController, semuanya akan bekerja secara bersama - sama secara otomatis (tanpa konfigurasi). Dengan aturan konvensi, gunakan garis bawah, huruf kecil, dan bentuk jamak kata untuk setiap nama tabel di dalam database. Contoh : bakers, pastry_stores, savory_cakes.
3.4.2 Konfigurasi Utama
Di dalam CakePHP, konfigurasi aplikasi terletak di /app/config/core.php. Isi file ini adalah kumpulan definisi variabel dari class Configure dan definisi konstanta yang menentukan bagaimana aplikasi anda nantinya akan bekerja. Sebelum kita melihat lebih dalam mengenai variabel ini, anda perlu harus terbiasa dulu dengan Configure, class registry untuk konfigurasi CakePHP.
3.4.3 Kelas Konfigurasi
Walaupun beberapa hal perlu dikonfigurasi di dalam CakePHP, kadangkala akan lebih baik jika anda memiliki konfigurasi tersendiri untuk aplikasi anda. Dulu mungkin anda harus mendefinisikan konfigurasi custom atau konstanta di dalam beberapa berkas (file). Hal ini membuat anda harus meng-include-kan berkas konfigurasi tersebut setiap kalau anda memerlukan variabel atau konstanta di dalamnya.
Kelas Configure baru dari CakePHP dapat digunakan untuk menyimpan data tersebut, dan mengambil nilai tertentu dari aplikasi atau runtime. Hati - hati, kelas ini memperbolehkan untuk menyimpan apa saja di dalamnya, dan menggunakannya di bagian lain dalam kode anda (sebuah godaan untuk merusak pola MVC, sedangkan CakePHP didesain untuk itu). Tujuan utama dari kelas Configure ini adalah untuk mengumpulkan variabel - variabel yang bisa disebar (share) di banyak objek. Selalu ingat untuk tetap mengikuti aturan "convention over configuration" dan anda tidak akan berakhir dengan merusak struktur MVC yang sudah dirancang.
Kelas ini bertindak sebagai singleton dan method - method di dalamnya bisa dipanggil darimana saja di dalam aplikasi anda (dalam konteks statis).
<?php Configure::read('debug'); ?>
<?php Configure::read('debug'); ?>
3.4.3.1 Configure Methods
3.4.3.1.1 write
write(string $key, mixed $value)
Gunakan write() untuk menyimpan data di dalam konfigurasi aplikasi anda.
Configure::write('Company.name','Pizza, Inc.');
Configure::write('Company.slogan','Pizza for your body and soul');
Configure::write('Company.name','Pizza, Inc.');Configure::write('Company.slogan','Pizza for your body and soul');
penggunaan notasi titik di dalam parameter $key. Anda bisa menggunakan notasi ini untuk mengorganisir konfigurasi anda dalam satu gruo logikal.
Contoh di atas juga bisa ditulis dalam satu panggilan :
Configure::write(
'Company',array('name'=>'Pizza, Inc.','slogan'=>'Pizza for your body and soul')
);
Configure::write('Company',array('name'=>'Pizza, Inc.','slogan'=>'Pizza for your body and soul'));
Anda bisa menggunakan Configure::write('debug', $int) untuk berpindah antara mode debug dan mode produksi secara langsung (on the fly). Hal ini akan berguna terutama untuk AMF atau interaksi SOAP dimana melakukan debugging informasi bisa menyebabkan masalah parsing.
3.4.3.1.2 read
read(string $key = 'debug')
Digunakan untuk membaca konfigurasi data dari aplikasi. Defaultnya adalah nilai (value) penting dari debug CakePHP. Koola sebuah kunci (key) diberikan, data dikembalikan sebagai return value dari fungsi ini. Dengan menggunakan contoh write() di atas, sekarang kita bisa membaca data tersebut :
Configure::read('Company.name'); //yields: 'Pizza, Inc.'
Configure::read('Company.slogan'); //yields: 'Pizza for your body and soul'
Configure::read('Company');
//yields:
array('name' => 'Pizza, Inc.', 'slogan' => 'Pizza for your body and soul');
Configure::read('Company.name'); //yields: 'Pizza, Inc.'Configure::read('Company.slogan'); //yields: 'Pizza for your body and soul'Configure::read('Company');//yields:array('name' => 'Pizza, Inc.', 'slogan' => 'Pizza for your body and soul');
3.4.3.1.3 delete
delete(string $key)
Digunakan untuk menghapus informasi dari konfigurasi aplikasi.
Configure::delete('Company.name');
Configure::delete('Company.name');
3.4.3.1.4 load
load(string $path)
Gunakan method ini untuk mengambil informasi konfigurasi dari sebuah berkas tertentu.
// /app/config/messages.php:
<?php
$config['Company']['name'] = 'Pizza, Inc.';
$config['Company']['slogan'] = 'Pizza for your body and soul';
$config['Company']['phone'] = '555-55-55';
?>
<?php
Configure::load('messages');
Configure::read('Company.name');
?>
// /app/config/messages.php:<?php$config['Company']['name'] = 'Pizza, Inc.';$config['Company']['slogan'] = 'Pizza for your body and soul';$config['Company']['phone'] = '555-55-55';?><?phpConfigure::load('messages');Configure::read('Company.name');?>
Setiap pasangan key-value direpresentasikan di dalam berkas dengan array $config. Variabel - variabel lain di dalam berkas tersebut akan diabaikan oleh fungsi load().
3.4.3.1.5 versi
version()
Mengembalikan informasi versi CakePHP yang digunakan pada aplikasi saat ini.
3.4.3.2 Variabel Konfigurasi Utama CakePHP
Kelas Configure digunakan untuk mengatur kumpulan dari variabel konfigurasi utama CakePHP. Variabel - variabel ini dapat ditemukan di app/config/core.php. Deskripsi dari tiap variabel dan apa pengaruhnya terhadap aplikasi CakePHP anda dijelaskan di bawah ini.
| Variabel Configure | Deskripsi |
|---|---|
| debug |
Merubah keluaran (output) dari debugging CakePHP. 0 = Mode produksi, tidak ada keluaran. 1 = Pesan error dan peringatan ditampilkan. 2 = Pesan error, peringatan, dan SQL ditampilkan. 3 = Pesan error, peringatan, SQL, dan dump lengkap dari controller ditampilkan. |
| App.baseUrl | Hilangkan komentar (Un-comment) definisi ini, jika anda tidak berencana untuk menggunakan mod_rewrite Apache dengan CakePHP. Jangan lupa untuk menghapus berkas .htaccess anda. |
| Routing.admin | Hilangkan tanda komentar pada definisi ini jika anda ingin memanfaatkan admin routes dari CakePHP. Ganti variabel ini dengan admin route yang ingin anda gunakan. Hal ini akan dibahas lebih lanjut nanti. |
| Cache.disable | Jika di set true, maka caching akan dimatikan untuk seluruh bagian website. |
| Cache.check | Jika di set true, mengaktifkan cache untuk view. Pengaktifan masih diperlukan di dalam controller, tetapi variabel ini juga mengaktifkan deteksi terhadap setting tersebut. |
| Session.save |
Memberitahu CakePHP mekanisme penyimpanan session yang mana yang akan digunakan. php = Menggunakan penyimpanan session default PHP. cake = Menyimpan data session di /app/tmp database = Menyimpan data session di dalam database. Pastikan tabel tersebut sudah di set up menggunakan file SQL yang terletak di /app/config/sql/sessions.sql. |
| Session.table | Nama tabel yang menyimpan informasi session (tidak termasuk prefiks). |
| Session.database | Nama database yang menyimpan session. |
| Session.cookie | Nama cookie yang digunakan untuk melacak session. |
| Session.timeout | Standar timeout session (dalam detik). Nilai sebenarnya tergantung dari Security.level. |
| Session.start | Jika di set true, maka session akan otomatis dijalankan. |
| Session.checkAgent | Jika diset false, session CakePHP tidak akan melakukan pengecekan untuk memastikan user agent tidak berubah antar request. |
| Security.level |
Level keamanan dari CakePHP. Timeout session didefinisikan di 'Session.timeout', dikalikan dengan nilai yang tertera disini. Nilai - nilai yang valid: 'high' = x 10 'medium' = x 100 'low' = x 300 'high' juga 'medium' mengaktifkan session.referer_check |
| Security.salt | String acak yang digunakan dalam security hashing. |
| Acl.classname, Acl.database | Konstanta yang digunakan oleh fungsi - fungsi dari Access Control List Constants CakePHP. Silahkan lihat bab Access Control list untuk informasi lebih lanjut. |
Konfigurasi cache juga ada di core.php - Kita akan membahas ini belakangan.
Kelas Configure dapat digunakan untuk membaca dan menulis setting konfigurasi utama secara langsung saat dijalankan (on the fly). Hal ini akan sangat berguna terutama jika anda ingin merubah setting debug untuk bagian tertentu saja dari aplikasi anda.
3.4.3.3 Konstanta Konfigurasi
Ketika kebanyakan opsi konfigurasi ditangani oleh Configure, ada beberapa konstanta yang digunakan CakePHP selama proses berlangsung (runtime).
| Konstanta | Deskripsi |
|---|---|
| LOG_ERROR | Konstanta Error. Digunakan untuk membedakan error logging dan debugging. Saat ini PHP mendukung LOG_DEBUG. |
3.4.4 The App Class
Loading additional classes has become more streamlined in CakePHP. In previous versions there were different functions for loading a needed class based on the type of class you wanted to load. These functions have been deprecated, all class and library loading should be done through App::import() now. App::import() ensures that a class is only loaded once, that the appropriate parent class has been loaded, and resolves paths automatically in most cases.
3.4.4.1 Using App::import()
App::import($type, $name, $parent, $search, $file, $return);
At first glance App::import seems complex, however in most use cases only 2 arguments are required.
3.4.4.2 Importing Core Libs
Core libraries such as Sanitize, and Xml can be loaded by:
App::import('Core', 'Sanitize'); App::import('Core', 'Sanitize');
The above would make the Sanitize class available for use.
3.4.4.3 Importing Controllers, Models, Components, Behaviors, and Helpers
All application related class should also be loaded with App::import(). The following examples illustrate how to do so.
3.4.4.3.1 Loading Controllers
App::import('Controller', 'MyController');
3.4.4.3.2 Loading Models
App::import('Model', 'MyModel');
3.4.4.3.3 Loading Components
App::import('Component', 'Auth');
3.4.4.3.4 Loading Behaviors
App::import('Behavior', 'Tree');
3.4.4.3.5 Loading Helpers
App::import('Helper', 'Html');
3.4.4.4 Loading from Plugins
Loading classes in plugins works much the same as loading app and core classes except you must specify the plugin you are loading from.
App::import('Model', 'PluginName.Comment'); App::import('Model', 'PluginName.Comment');
3.4.4.5 Loading Vendor Files
The vendor() function has been deprecated. Vendor files should now be loaded through App::import() as well. The syntax and additional arguments are slightly different, as vendor file structures can differ greatly, and not all vendor files contain classes.
The following examples illustrate how to load vendor files from a number of path structures. These vendor files could be located in any of the vendor folders.
3.4.4.5.1 Vendor examples
To load vendors/geshi.php
App::import('Vendor', 'geshi'); App::import('Vendor', 'geshi');
To load vendors/flickr/flickr.php
App::import('Vendor', 'flickr/flickr'); App::import('Vendor', 'flickr/flickr');
To load vendors/some.name.php
App::import('Vendor', 'SomeName', array('file' => 'some.name.php')); App::import('Vendor', 'SomeName', array('file' => 'some.name.php'));
To load vendors/services/well.named.php
App::import('Vendor', 'WellNamed', array('file' => 'services'.DS.'well.named.php')); App::import('Vendor', 'WellNamed', array('file' => 'services'.DS.'well.named.php'));
3.4.5 Routes Configuration
Routing is a feature that maps URLs to controller actions. It was added to CakePHP to make pretty URLs more configurable and flexible. Using Apache’s mod_rewrite is not required for using routes, but it will make your address bar look much more tidy.
As will be explained later, routes in CakePHP 1.2 have been expanded and are now very powerful.
3.4.5.1 Default Routing
Before you learn about configuring your own routes, you should know that CakePHP comes configured with a default set of routes. CakePHP’s default routing will get you pretty far in any application. You can access an action directly via the URL by putting its name in the request. You can also pass parameters to your controller actions using the URL.
URL pattern default routes:
http://example.com/controller/action/param1/param2/param3
The URL /posts/view maps to the view() action of the PostsController, and /products/viewClearance maps to the view_clearance() action of the ProductsController. If no action is specified in the URL, the index() method is assumed.
The default routing setup also allows you to pass parameters to your actions using the URL. A request for /posts/view/25 would be equivalent to calling view(25) on the PostsController, for example.
3.4.5.2 Named parameters
New in CakePHP 1.2 is the ability to use named parameters. You can name parameters and send their values using the URL. A request for /posts/view/title:first+post/category:general would result in a call to the view() action of the PostsController. In that action, you’d find the values of the title and category parameters inside $this->passedArgs[‘title’] and $this->passedArgs[‘category’] respectively.
Some summarizing examples for default routes might prove helpful.
URL to controller action mapping using default routes:
URL: /monkeys/jump
Mapping: MonkeysController->jump();
URL: /products
Mapping: ProductsController->index();
URL: /tasks/view/45
Mapping: TasksController->view(45);
URL: /donations/view/recent/2001
Mapping: DonationsController->view('recent', '2001');
URL: /contents/view/chapter:models/section:associations
Mapping: ContentsController->view();
$this->passedArgs['chapter'] = 'models';
$this->passedArgs['section'] = 'associations';
3.4.5.3 Defining Routes
Defining your own routes allows you to define how your application will respond to a given URL. Define your own routes in the /app/config/routes.php file using the Router::connect() method.
The connect() method takes up to three parameters: the URL you wish to match, the default values for custom route elements, and regular expression rules to help the router match elements in the URL.
The basic format for a route definition is:
Router::connect(
'URL',
array('paramName' => 'defaultValue'),
array('paramName' => 'matchingRegex')
)
Router::connect('URL',array('paramName' => 'defaultValue'),array('paramName' => 'matchingRegex'))
The first parameter is used to tell the router what sort of URL you're trying to control. The URL is a normal slash delimited string, but can also contain a wildcard (*) or custom route elements (URL elements prefixed with a colon). Using a wildcard tells the router what sorts of URLs you want to match, and specifying route elements allows you to gather parameters for your controller actions.
Once you've specified a URL, you use the last two parameters of connect() to tell CakePHP what to do with a request once it has been matched. The second parameter is an associative array. The keys of the array should be named after the route elements in the URL, or the default elements: :controller, :action, and :plugin. The values in the array are the default values for those keys. Let's look at some basic examples before we start using the third parameter of connect().
Router::connect(
'/pages/*',
array('controller' => 'pages', 'action' => 'display')
);
Router::connect('/pages/*',array('controller' => 'pages', 'action' => 'display'));
This route is found in the routes.php file distributed with CakePHP (line 40). This route matches any URL starting with /pages/ and hands it to the display() method of the PagesController(); The request /pages/products would be mapped to PagesController->display('products'), for example.
Router::connect(
'/government',
array('controller' => 'products', 'action' => 'display', 5)
);
Router::connect('/government',array('controller' => 'products', 'action' => 'display', 5));
This second example shows how you can use the second parameter of connect() to define default parameters. If you built a site that features products for different categories of customers, you might consider creating a route. This allows you link to /government rather than /products/display/5.
Another common use for the Router is to define an "alias" for a controller. Let's say that instead of accessing our regular URL at /users/someAction/5, we'd like to be able to access