CakePHP membuatkan pembinaan laman web menjadi mudah disebabkan konsep Magik dan Rapid Application Development yang diperkenalkan. Tetapi bagaimana dengan Sekuriti ?
Perisian yang boleh dicuba untuk tujuan security
Browser : Mozilla Firefox
Plugin wajib :
1) SQL Inject Me
2) Firebug
Sila gunakan Google untuk install plugins-plugins tersebut
Filter Form Data
==========================
CakePHP menyediakan Utiliti bernama Sanitize untuk filter form data sebelum disimpan ke dalam database
Umum mengetahui yang CakePHP akan terima variable $this->data yang didatangkan dari Form yangdisubmit oleh pengguna, jadi adalah menjadi tanggungjawab kita untuk filterkan data tersebut
Contoh 1, kod di bawah akan cleankan kesemua variable $this->data
$this->data = Sanitize::clean($this->data);
Sila rujuk : http://book.cakephp.org/#!/view/1183/Data-Sanitization
Hanya Save Field Yang Perlu Sahaja=============================
Bayangkan dalam registration form anda hanya display username,password,email,biodata tetapi di dalam table database ada field group_id. Bayangkan jika saya gunakan Firebug dan tambah virtual field group_id = 1. Dan secara automatik user biasa boleh menjadi admin :D ( kebiasaanya group_id = 1 ialah admin ). Jadi bagaimana nak bagitau CakePHP cuma save field yang berkaitan sahaja ?
Guna teknik whitelist.
Caranya, kita letak dalam array field-field yang hendak disave ke dalam DB
$whitelist = array('username', 'password', 'email', 'biodata');
if($this->save( $this->data , $whitelist ) ) {
// saved
}
Enablekan Security Component
=============================
Cara paling senang, cuma enablekan Security Component dalam Controller atau AppController, Secara automatik Form yang dibuat menggunakan object Form akan terlindung dari anasir-anasir jahat lagi nakal
$components = array('Security');
Kalau tak percaya, cuba gunakan h() function dalam view
echo h($this->Form->create('User'));
Memaparkan catatan dengan label cakephp. Papar semua catatan
Memaparkan catatan dengan label cakephp. Papar semua catatan
Rabu, 16 Mac 2011
Selasa, 26 Oktober 2010
CakePHP: Access user data practically from anywhere
I just stumble upon this idea when preparing CakePHP Training materials for MOSTI, Putrajaya. Imagine that you're a seasoned Cake Baker and you would want to get access of logged in user in
1. Models
2. Controllers
3. Views
4. Components
5. Helpers
using the same simple call .
So here's how I did it. First, after the User logged in, grab the user's ID and use CakePHP Magic call to fetch all the user's details and later store it in Configure's basket.
Now here the best part,
# fetch the user's id
$user_id = Configure::read('LoggedIn.User.id');
# fetch the user's email
$user_email = Configure::read('LoggedIn.User.email');
# fetch the user's group title ( User belongsTo Group )
$user_group_title = Configure::read('LoggedIn.User.Group.title');
And the best part is, you can use this call in Model,Behavior,Helper,Component,View,Element and Controller.
1. Models
2. Controllers
3. Views
4. Components
5. Helpers
using the same simple call .
So here's how I did it. First, after the User logged in, grab the user's ID and use CakePHP Magic call to fetch all the user's details and later store it in Configure's basket.
![]() |
| app_controller.php |
Now here the best part,
# fetch the user's id
$user_id = Configure::read('LoggedIn.User.id');
# fetch the user's email
$user_email = Configure::read('LoggedIn.User.email');
# fetch the user's group title ( User belongsTo Group )
$user_group_title = Configure::read('LoggedIn.User.Group.title');
And the best part is, you can use this call in Model,Behavior,Helper,Component,View,Element and Controller.
![]() |
| getting $user_id in Model Callback never been easier |
Khamis, 23 September 2010
Flex RIA
I'm reading these 2 books at the moment,
- RTMP auth
- Camera selector
- Publish / Unpublish stream
- Sabex - Professional Flash Video ( AS2,AS2 )
- O'Reilly Essential Action Script 3.0
- RTMP auth
- Camera selector
- Publish / Unpublish stream
Selasa, 7 September 2010
Wowza Recording :: Managing files
Wowza records the stream and put it into $lib/content directory. With no database connection though. So I wrote a simple file manupulation class ( thanks CakePHP File Utils ), and user can view thier own recorded video streamed using rtmp :D
Isnin, 6 September 2010
Beta Test : Stream Your Life
![]() |
| Register with Stream Your Life Portal |
![]() |
| Read the Settings information, and download the necessary software |
![]() |
| Adobe FMLE Encoder asking for Username/Password ( the one you register at the portal ) |
![]() |
| Realtime Statistics |
![]() |
| Now you can see your streaming on the website. |
Streaming Service is a the new phenomenon nowdays. Youtube for example offering free Video On Demand Streaming based on user submitted contents using Flash technology. Now the streaming players have evolved to Live Streaming service. Realtime Streaming is possible using RTMP protocol used by Adobe Flash Media Server, Red5 and Wowza Streaming Server. So for this project the goal are :
- User can self register to the portal
- User download Adobe Media Live Encoder
- User connecting to the portal from encoder by providing Username & Password
- User start streaming and can share the stream to anyone
- Every registered user will be given 1 stream name
- Stream is viewable by PC, Mobile Phone using Flash Technology
- Statistics for every stream
The Challenge For Integration
Wowza is Java based and the API is in Java. The portal is written using CakePHP framework which is powered by PHP and the database is provided by MySQL.
A barebone Wowza doesn't have much protection
- everybody can publish to Wowza without authentication
- hotlinking from origin server ( imagine somebody stole your stream and put into their website )
- no MySQL based logs for every stream
- no limit on which encoder can publish to the server ( FMLE,Wirecast, Custom AS3 )
The most important thing is, how do I integrate my CakePHP User with Wowza and each user can only stream according to thier username only ( limit 1 stream per registered user )
After days of strolling the net ( especially in wowza media forums ), all the requirements above have been fulfilled even without proper Java knowledge :D
Skillsets Needed
To polish the system to enterprise level, I'll need the workhorses with these knowledges :
- Java Programming ( wowza modules development )
- Video/ Audio Format
- Wowza/ Flash Media Server
- Streaming Technology
- Mobile Phone Developer ( J2ME,Cocoa,Blackberry )
- Linux System Administration
- Web Development ( CakePHP,Ruby On Rails, Gearman, Ajax, Jquery )
- Flash Developer ( Action Script )
- MySQL Database logging / Shell Scripting
- Scalabity / HA / Load Balancing
Target Clients & Possible Applications
- Organization who want to do live streaming
- Weddings Live Stream
- Online TV Stations
- Ustream
- Flix
- JustinTV
- LiveStation
- Qik
Possible Revenues
- Advertisement by user channels
- Advertisement preload before stream play
- Premium stream plan ( recording, higher bitrate, HD, privacy options, more channels, statistics )
- There's no local free streaming in Malaysia. This streaming will cater user's in Malaysia and since it's located withing the country, faster streaming experience can be achieved
- Streaming made easy with user friendly software and can be viewed using regular browser. No need special software to view the stream
- No need to publish stream to foreign country as the same service can be done locally
The hard part ( integrations to portal, statistics, logging ,ACL permission ) have been done. Basically the framework is ready to cater more personalisation based on client's need. This technology potential is limitless. You can target both PC and Mobile user from single application.
Live demo : http://202.190.99.75
Azril Nazli Alias
Putrajaya
Sabtu, 4 September 2010
iStream.My Features
After weeks of playing WowZa, the goal of making my own user generated stream site is getting closer. So lets define what the site basic features :
1. Multiple user groups via ACL ( super, admin, user, suspended )
2. Integration with Wowza RTMP Authentication engine based on their username/password
3. Limit user's stream number/name/bitrate
4. Prevent hotlinking by only allow my server's IP in Domain Lock setting ( not embedable )
5. Statistics for each stream, number of viewers, list of active stream
1. Multiple user groups via ACL ( super, admin, user, suspended )
2. Integration with Wowza RTMP Authentication engine based on their username/password
3. Limit user's stream number/name/bitrate
4. Prevent hotlinking by only allow my server's IP in Domain Lock setting ( not embedable )
5. Statistics for each stream, number of viewers, list of active stream
Wowza RTMP Authentication and CakePHP
![]() |
| Adobe FMLE 3.1 asking Username/Password to Publish |
URL : http://www.wowzamedia.com/forums/showthread.php?t=1281
I want to protect my stream to only authorized user ( registered users ). In order to do that, I'm using Wowza Media Security Module. After following the guide in PDF, my Adobe FMLE finally asking for username / password. The module is using plain text file to store the username/password pair and I'm intending to sync it with my CakePHP Users database. The plan will be
1. Write a wrapper class to manage users in wowza text file
2. User CakePHP callback function in Users Controller so when user registered with the system, it will sync with the flat file, so does when the user update or de-register from the site.
Rabu, 1 September 2010
Web Application Development
Now the workload is getting heavy
- Google Map for Base Stations and Subscribers
- CCTV Management System
- Video Management System
- Wowza Log Management System and Wowza System Administration
- CDS-IS CDN Log Management System
Sabtu, 21 Ogos 2010
Ebook : Panel Kawalan User menggunakan ACL/AUTH
Akhirnya setelah menulis dan membuat ujian selama lebih kurang 5 hari, Ebook Panel Kawalan User menggunakan Acl/Auth berjaya disiapkan.
Acl adalah satu komponen penting dalam Framework CakePHP , dan untuk menguasainya agak mengambil masa. Saya memerlukan beberapa percubaan untuk memahami konsep asal ACL dan AUTH. Jika anda seorang developer CakePHP, cuba ikuti tutorial ini.
ScribD: http://www.scribd.com/doc/36175172/CakePHPPanelKawalanACL-AzrilNazli
PDF : http://mamakspot.googlecode.com/files/CakePHPPanelKawalanACL-AzrilNazli.pdf
Jumaat, 20 Ogos 2010
Menulis Ebook Panel Kawalan
Sudah 45 mukasurat Ebook Membina Panel Kawalan ACL ditulis. Semalam dengan bantuan seorang tester, kami mencuba untuk test run sistem Panel Kawalan ACL dan alhamdulillah tiada major error, cuma tertinggal code. Hari ini saya menulis dan menguji kod untuk AccessComponent dan AccessHelper. Fungsinya untuk show/hide menu berdasarkan credentials user yang login ke dalam sistem. Sistem yang dibina cukup lengkap dengan
- User Registration,
- Login,
- Logout,
- Paparan data user yang login
- Show/Hide Menu berdasarkan ARO Permission
- Highlight Menu
- CSS Untuk menu
Countdown : Panel Kawalan ACL CakePHP
![]() | |
| Muka Hadapan Ebook |
ACL atau Access Control List adalah satu tajuk yang agak sukar dikuasai, namun sangat berguna jika anda berjaya menguasainya. Nantikan penerbitan Ebook ini. Pihak kami sedang membuat testing ke atas kod yang dihasilkan dengan bantuan programmer-programmer CakePHP yang cukup terlatih.
Sabtu, 14 Ogos 2010
CakePHP beforeSave :: Automatic append user_id
I use this callback extensively, so need to hardcode user_id in every controller.
function beforeSave() {
App::import('Component', 'Session');
$Session = new SessionComponent();
$user = $Session->read('Auth.User');
$this->data[$this->alias]['user_id'] = $user['id'];
return true;
}
function beforeSave() {
App::import('Component', 'Session');
$Session = new SessionComponent();
$user = $Session->read('Auth.User');
$this->data[$this->alias]['user_id'] = $user['id'];
return true;
}
Jumaat, 13 Ogos 2010
Membina Panel Kawalan untuk ACL
Hampir 2 hari memahamkan Acl di dalam CakePHP.
Apa pentingnya Acl ?
Acl berfungsi untuk mengawal akses pengguna setelah berjaya login ke dalam sistem. Cotnohnya sistem anda mempunyai usergroup berikut
SuperUser
Admin
User
Suspended
dan anda mempunyai Controller/Action seperti berikut
Users/index
Users/add
Posts/index
Post/edit
dan anda ingin menghadkan akses setiap usergroup tersebut.
Pertama, saya bina satu panel kawalan untuk tambah/buang semua actions ke dalam sistem
![]() |
| Assign registered Acos ( Action ) to Aro ( Group ) |
![]() | ||
| ACL check in View |
![]() |
| Improved Security Access Page |
![]() |
| Cake CLI View Acos |
![]() | ||
| Cake CLI View AROS |
![]() |
| MySQL data structure |
![]() |
Senarai semua actions dalam sistem |
Isnin, 9 Ogos 2010
Mengesan staff / pekerja / kekasih guna teknologi GPS
Saya ada membuat satu sistem pengesan GPS yang simple yang mempunyai ciri-ciri berikut :
1. Aplikasi GPS Tracking yang run dalam Nokia E71/E72/E75 ( Java App ) yang akan menghantar data GPS mengikut interval yang ditentukan menggunakan 3G ( HTTP Protokol )
2. Penerima data menggunakan CakePHP dan data yang diterima akan dimasukkan ke dalam database MySQL
3. View data menggunakan kordinat dari dalam database menggunakan Google MAP JS API
Untuk menggunakan SMS pun boleh tapi disebabkan kos yang tinggi, buat masa ini sistem ini hanya menggunakan HTTP update sahaja
Jumaat, 30 Julai 2010
CakePHP : Menggunakan Shell dan Folder Utility
Bayangkan anda perlu memproses log fail dari Apache Access Log dan System Admin telah membuat rotation. Setiap log file mempunyai beratus ribu row, dan ada mempunyai beratus-ratus file yang perlu diproses .....
Setup Cake CLI dalam Windows
===================================================
1. Copy fail APP/cake/console/cake.bat ke dalam c:\WINDOWS\cake.bat
Memperkenalkan CakePHP Shell CLI dan Folder Utility
===================================================
Untuk mengikuti tutorial ini, pastikan anda boleh melaksanakan arahan cake bake.
1. Cipta fail APP/vendors/shell/proses_data.php
2. Mari kita cuba run fail tersebut di dalam APP. Laksanakan arahan berikut
Hasilnya :
Paparan Hello World berjaya dikeluarkan menggunakan arahan $this->out('Hello World');. Di dalam fail proses_data.php, Convention yang perlu diikuti ialah, nama Class mesti dalam berbentuk camelCase. Contohnya :
1. class ProsesData extends Shell
2. class UserManagement extends Shell
3. class FetchFile extends Shell
Nama fail mesti mengikut format variable kepada nama Class, contohnya
1. proses_data.php
2. user_management.php
3. fetch_file.php
Dan fail-fail ini mesti disimpan di dalam folder APP/vendors/shell/*
Method main() di dalam file tersebut akan dijalankan secvara automatik.
Cipta Sistem Dialog
==========================================
Save fail proses_data.php dan run kembali. Hasilnya, anda akan dapat dialog samaada Valid directory atau Invalid Directory.
$this->hr() akan paparkan line seperator
$this->in() akan menerima input dari user
Memperkenalkan Folder Utility
Seterusnya, saya ingin listkan semua fail dalam direktori yang dinyatakan. Jadi saya perlu import utility class bernama Folder
Save fail di atas, dan cuba run.
Sekian setakqat ini tutorial menggunakan CakePHP Shell dan Folder
Setup Cake CLI dalam Windows
===================================================
1. Copy fail APP/cake/console/cake.bat ke dalam c:\WINDOWS\cake.bat
![]() |
| c:\windows\cake.bat ( pastikan setting anda betul ) |
![]() |
| /usr/bin/cake di dalam Linux CentOS |
Memperkenalkan CakePHP Shell CLI dan Folder Utility
===================================================
Untuk mengikuti tutorial ini, pastikan anda boleh melaksanakan arahan cake bake.
1. Cipta fail APP/vendors/shell/proses_data.php
class ProsesDataShell extends Shell {
function main() {
$this->out('Hello World!');
} }
?>
2. Mari kita cuba run fail tersebut di dalam APP. Laksanakan arahan berikut
cake proses_data
Hasilnya :
Paparan Hello World berjaya dikeluarkan menggunakan arahan $this->out('Hello World');. Di dalam fail proses_data.php, Convention yang perlu diikuti ialah, nama Class mesti dalam berbentuk camelCase. Contohnya :
1. class ProsesData extends Shell
2. class UserManagement extends Shell
3. class FetchFile extends Shell
Nama fail mesti mengikut format variable kepada nama Class, contohnya
1. proses_data.php
2. user_management.php
3. fetch_file.php
Dan fail-fail ini mesti disimpan di dalam folder APP/vendors/shell/*
Method main() di dalam file tersebut akan dijalankan secvara automatik.
Cipta Sistem Dialog
==========================================
class ProsesDataShell extends Shell { function main() { $this->out('Hello World!'); $this->hr(); $path = null; while (!is_dir($path)) { $path = $this->;in('Directory :'); if (!is_dir($path)){ $this->out('Invalid directory!'); }else{ $this->out('Valid directory!'); } } } }?>
Save fail proses_data.php dan run kembali. Hasilnya, anda akan dapat dialog samaada Valid directory atau Invalid Directory.
$this->hr() akan paparkan line seperator
$this->in() akan menerima input dari user
Memperkenalkan Folder Utility
Seterusnya, saya ingin listkan semua fail dalam direktori yang dinyatakan. Jadi saya perlu import utility class bernama Folder
class ProsesDataShell extends Shell {
function main() {
$this->out('Hello World!');
$this->hr();
$path = null;
while (!is_dir($path)) {
$path = $this->in('Directory :');
if (!is_dir($path)){
$this->out('Invalid directory!');
} else {
$this->out('Valid directory!');
# senaraikan fail dalam direktori
uses('Folder');
$folder =& new Folder();
# read directory
$folder = new Folder($path);
$files = $folder->read();
foreach($files as $f){
foreach($f as $k => $v ){
# only show we_access
$this->out($v);
}
}
}
}
}
}
?>
Save fail di atas, dan cuba run.
Sekian setakqat ini tutorial menggunakan CakePHP Shell dan Folder
10 sebab mengapa pilih CakePHP ?
Saya mempunyai pengalaman membuat web development sejak 1997 lagi dan telah mula menggunakan PHP semenjak itu.
Saat pertama dapat membuat connection PHP ke PostgreSQL di dalam box Linux Redhat sudah cukup membuat saya terpegun. Tidaklah susah seperti coding dalam PERL.
Ok, kemudian saya menggunakan PHP dan sungguh seronok, banyak juga projek web application dapat disiapkan dengan cepat dan mudah.Tetapi bila penggunaan library 3rd party bertambah, jadi macam rojak pulak code dalam sistem.
Sebelum mengenali CakePHP, saya menggunakan Symfony Framework . Memang canggih, ada Command Line Interface, tetapi pada saya terlalu bloated untuk get simple things done. Tetapi untuk aplikasi level enterprise, saya cukup galakkan guna Symfony.
Kemudian saya berubah ke CakePHP. Menggunakan konsep baru yang dinamakan MVC , sama seperti Symfony. Konsep MVC dalam CakePHP sungguh mudah hendak difahami.
Setelah menggunakan CakePHP, saya cuba pula Ruby On Rails. Dekat RM1k juga habis duit beli buku untuk RoR.
Setelah puas bermain-main dengan ketiga-tiga framework tersebut, saya memilih CakePHP. Mengapa ?
1. Convention Over Configuration
Saya suka prinsip yang digunakan oleh CakePHP. Katakan nak buat Authhentication dalam sistem, apa yang perlu saya buat ialah table bernama users dan mempunyai column id,username,password sahaja. Secara automatik CakePHP akan menggunakan table tersebut untuk tujuan Auth.
2. Object Relational Model
Jika membuat SQL statements, Oracle,PGsql dan MySQL mempunyai sintaks yang berbeza. Contohnya SQL untuk membuat Pagination. Konsep ORM yang digunakan oleh CakePHP diilhamkan oleh Ruby On Rails. Contohnya kod
# senaraikan semua user yang berasal dari Johor
$users = $this->User->findAllByState('johor');
# dapatkan nilai user yg menggunakan id -3
$user = $this->User->findById(3);
3. Model View Controller
Pada mulanya nak memahamkan konsep ini agak sukar. Kenapalah nak asingkan sampai jadi 3 fail. Tapi kini saya cukup suka menggunakan MVC.
Bayangkan anda mempunyai model bernama User. Setiap model mewakili 1 table dalam database, dan anda juga memelukan data dari table user yang tersimpan dalam Ldap, saya akan namakan sebagai user UserLdap. Jadi di sini sumber data saya tidak terhad dari databaseMySQL, malahan boleh berupa sumber data dari Ldap,Csv dan sebagainya.
Controller pula fungsinya menerima input dari pengguna menggunakan http GET atau POST dan akan memanggil data dari Model.
Data yang telah siap acuannya, akan dihantar pula ke View. Kita mungkin memerlukan berbagai jenis View seperti Html, Javascript, Xml malahan Mobile web. Jadi data yang sama boleh dipersembahkan kepada berbagai format. Mudah kan ?
4. Utility Helpers
Helpers di dalam CakePHP cukup memudahkan saya membuat kerja. Contohnya, saya nak convert string berbentuk training_cake_php_malaysia kepada bentuk yang mudah di baca, saya hanya perlu menggunakan class Utility bernama Inflector, contohnya $str = Inflector::humanize( 'cake_php_malaysia' ); hasilnya akan menjadi Cake Php Malaysia .
5. Core Helpers
Core Helpers seperti Form,Sessions,Javascript,Html cukup membantu saya untuk memastikan kod-kod yang ditulis dalam bentuk yang senang hendak diuruskan. Contohnya helper Html untuk menjana link dan mengeluarkan gambar. Contoh
echo $html->link('Index' , '/posts/index'); akan menghasilkan link berbentuk Link
Menggunakan helper Html membuatkan saya tidak perlu berfikir mengenai konfigurasi kod jika server dipindahkan ke Path URL yang lain. Contohnya jika sebelum ini path untuk gambar terletak di /img/gambar.jpg dan di server baru terletak di /assets/img/gambar.jpg, jika menggunakan kod Html yang biasa saya perlu mengubah kod satu-persatu. Dengan Helper Html, tidak perlu lagi.
Paling banyak membantu saya, sudah tentu Form Helpers. Jika anda membaca blog saya mengenai Contoh CakePHP Form , anda seudah tentu faham apa yang saya maksudkan.
6. Database Schema
Skema database ini diperkenalkan kepada saya sewaktu menggunakan Symfony, kemudiannya Ruby On Rails dan akhirnya di dalam CakePHP. Walaupun tidak selengkap Sf dan RoR, skema database generation dalam CakePHP sudah cukup membantu saya untuk maintain sistem dengan mudah.
Skema database script dalam CakePHP membolehkan saya create,update,delete skema database tanpa perlu menggunakan phpMyAdmin. Cukup sekadar melaksanakan arahan dari ms dos. Malah skema yang sama boleh digunakan ke atas MySQL,PostgreSQL, MS Access dan Oracle.
7. Command Line Interface
CakePHP didatangkan dengan skrip CLI yang dinamakan Bake. Saya boleh automate nak buat Project,Model ,Controller,Skema dan View menggunakan skrip ini. Contohnya saya perlu run batch job untuk proses data penduduk dari fail-fail CSV ke dalam table MySQL, dan fail ini memerlukan 1 jam untuk diproses. Menggunakan Bake Shell, saya dapat melakukan task tersebut dengan cepat, dan boleh dijalankan menggunakan Bash Linux atau Ms Dos
8. Large User Base
CakePHP mempunyai developer yang banyak di serata dunia dan sudah tentu tidak menjadi masalah untuk mencari jalan penyelesaian. Malah di Malaysia, penerimaan CakePHP sudah banyak, terutamanya di sektor-sektor kerajaan. Training-training yang saya kendalikan sebelum ini, kebanyakknya berkisar mengenai menggunakan CakePHP sebagai asas framework programming untuk developer mereka di dalam jabatan kerajaan.
9. Scaffolding
Scaffolding dalam CakePHP cukup membantu saya dalam design database. Hanya menggunakan hasMany,hasOne,hasManyAndBelongsTo dan belongsTo,saya boleh mereka database sistem dengan mudah dan boleh diusi keberkesanannya sebelum proceed ke full development mode. Dengan Scaffolding, saya boleh tunjukkan dengan client, design kasar sistem sebelum mereka setuju dengan design tersebut.
10. Model Relations
Impak yang paling besar kepada saya mengapa menggunakan CakePHP ialah, mudahnya membuat Table Join. Contohnya User mempunyai banyak Images, so relation yang saya perlu buat ialah, User hasMany Image, dan data milik User dan array Image dapat digunakan dengan sekali Query sahaja.
Selasa, 27 Julai 2010
CakePHP Search Filtering
Tadi masa training @ PMO, saya membuat contoh Search Engine menggunakan model Post dan Category.
Schema Post
---------------------------------
id |title |created | modified
Schema Post
---------------------------------
id | category_id | title | contents | created | modified
Relations
----------------------------------
Post belongsTo Category
Category hasMany Post
Strategi untuk Search
----------------------------------
1. User boleh search by keyword tanpa pilih Category. Akan return semua data
2. User boleh search by keyword tapi terhad kepada Category tertentu
3. Guna wildcard OR dan AND serentak. AND digunakan jika nilai $category_id dikesan
4. Pagination digunakan hasil carian dan bawa keyword menggunakan URL
Screen Shots
----------------------------------
User boleh search by Category atau All data tanpa isi Query. Data paginated
Training CakePHP @ Prime Minister Office Putrajaya
Dapat panggilan khas dari PMO, mereka nak saya buat training Advanced PHP menggunakan framework CakePHP 1.3. Training dibuat di ofis mereka. Nasib baik dekat dengan rumah saya di Presint 11. Student dalam 10 orang dan rata-rata mempunyai asas PHP walaupun kebanyakkanya tidak mempunyai asas OOP.
Jadi saya terpaksa tune cara pengajaran dan gunakan material pembelajaran versi mudah.
Selasa, 13 Julai 2010
CakePHP 1.3 Form Samples with default values
These are form examples with default value for CakePHP 1.3
Pastebin source code : http://pastebin.com/MAekWJCt
Langgan:
Catatan (Atom)




























