Hmm.. Sudah lama juga saya tidak membuat tutorial di website tercinta ini. Tetapi walopun saya tidak membuat tutorial, saya senang karena semakin ke sini ternyata semakin banyak visitor jagocoding.com ini. Visitor tidak hanya sekedar pembaca, anggotanya pun semakin ke sini semakin ke sana. Tetapi sayangnya masih banyak yang belum ingin menjadi anggota di forum ini cuma karena daftarnya harus ada verifikasi e-mail. Padahal, banyak banget manfaatnya kalo sudah daftar di situs ini, mulai dari bisa diskusi dan berkenalan dengan para "jago coding". Silakan dibaca di sini.
Oke, tutorial kali ini adalah kita akan membuat validasi form dengan menggunakan CakePHP. Untuk contoh kasusnya, kita akan membuat sebuah form registrasi yang mana mengharuskan pengguna untuk mengisi seluruh form yang harus diisi/required, validasi e-mail, url, dan password yang harus sama dengan input 'confirm password', termasuk minimal dan maksimal huruf yang dimasukkan.
Sebelum membuat validasi, ada baiknya temen2 mempelajari tutorial dasar CakePHP yang ada di sini: http://jagocoding.com/tag/tutorial-dasar
Langkah pertama yang harus dilakukan adalah membuat table untuk database yang akan digunakan. Diasumsikan di sini bahwa temen2 sudah mengkonfigurasi CakePHP dengan benar, jadi saya tidak akan menjelaskan terlalu banyak mengenai setting awal pada CakePHP.
Untuk membuat table, silakan copy syntax mysql di bawah ini, kemudian execute di mysql temen2:
CREATE TABLE IF NOT EXISTS `pengguna` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nama_lengkap` varchar(125) NOT NULL, `alamat` text NOT NULL, `email` varchar(125) NOT NULL, `website` varchar(125) NOT NULL, `username` varchar(125) NOT NULL, `password` varchar(125) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Setelah itu, untuk memudahkan proses selanjutnya, kita akan menentukan rule-rule untuk setiap validasi field yang akan kita gunakan sebelum ke tahap programming.
- field Nama Lengkap harus diisi, tidak boleh kosong, dan minimal 2 huruf
- field Alamat harus diisi, tidak boleh kosong
- field E-Mail harus diisi, dan format yang diinputkan harus sesuai dengan format e-mail yang benar
- field Website tidak wajib diisi, tetapi harus sesuai dengan format URL yang benar
- field Username dan password harus diisi, dan minimal 5 huruf, dan maksimal 20 huruf, mengandung huruf dan angka
<?php class Pengguna extends AppModel { public $useTable = 'pengguna'; }
Mengapa ada inisialisasi $useTable? karena kita membuat tabel menggunakan bahasa Indonesia dengan mengabaikan aturan plural. Jika kita membuat table dengan nama users (memakai 's'), maka jika kita membuat model bernama User, kita tidak usah menambahkan variable $useTable. CakePHP secara otomatis akan mendeteksi nama table sesuai dengan nama model dengan menambahkan 's' atau 'es' (aturan pluralisme bahasa inggris).
Sekarang, kita akan menambahkan validasi dengan rule-rule seperti yang kita tulis di atas. Membuat validasi pada framework Cakephp yaitu dituliskan DI MODELnya...
Tambahkan kode-kode berikut di dalam class Pengguna.php (model Pengguna):
public $validate = array( 'nama_lengkap' => array( 'rule' => array('minLength', '2'), //minimal 2 huruf 'required' => true, //tidak boleh kosong, required 'message' => 'Mohon masukkan minimal 2 huruf' ), 'alamat' => array( 'rule' => 'notEmpty', //tidak boleh kosong 'message' => 'Alamat tidak boleh kosong' ), 'email' => array( 'rule' => 'email', //harus format e-mail 'required' => true, 'message' => 'Format e-mail harus benar' ), 'website' => array( 'rule' => 'url', //harus format url 'message' => 'Format URL harus benar' ), 'username' => array( 'alphaNumeric' => array( 'rule' => 'alphaNumeric', //harus format e-mail 'required' => true, 'message' => 'Username harus huruf dan angka' ), 'between' => array( 'rule' => array('between', 5, 20), 'message' => 'Username minimal 5 dan maksimal 20 karakter' ) ), 'password' => array( 'alphaNumeric' => array( 'rule' => 'alphaNumeric', //harus format e-mail 'required' => true, 'message' => 'Password harus huruf dan angka' ), 'between' => array( 'rule' => array('between', 5, 20), 'message' => 'Password minimal 5 dan maksimal 20 karakter' ) ), );
Jadi, kode secara lengkapnya untuk model adalah:
<?php class Pengguna extends AppModel { public $useTable = 'pengguna'; public $validate = array( 'nama_lengkap' => array( 'rule' => array('minLength', '2'), //minimal 2 huruf 'required' => true, //tidak boleh kosong, required 'message' => 'Mohon masukkan minimal 2 huruf' ), 'alamat' => array( 'rule' => 'notEmpty', //tidak boleh kosong 'message' => 'Alamat tidak boleh kosong' ), 'email' => array( 'rule' => 'email', //harus format e-mail 'required' => true, 'message' => 'Format e-mail harus benar' ), 'website' => array( 'rule' => 'url', //harus format url 'message' => 'Format URL harus benar' ), 'username' => array( 'alphaNumeric' => array( 'rule' => 'alphaNumeric', //harus format e-mail 'required' => true, 'message' => 'Username harus huruf dan angka' ), 'between' => array( 'rule' => array('between', 5, 20), 'message' => 'Username minimal 5 dan maksimal 20 karakter' ) ), 'password' => array( 'alphaNumeric' => array( 'rule' => 'alphaNumeric', //harus format e-mail 'required' => true, 'message' => 'Password harus huruf dan angka' ), 'between' => array( 'rule' => array('between', 5, 20), 'message' => 'Password minimal 5 dan maksimal 20 karakter' ) ), ); }
Buatlah controller di folder /app/Controller dengan nama PenggunaController.php:
<?php class MemberController extends AppController { public $uses = array('Pengguna'); public function register() { if (!empty($this->request->data)) { if ($this->Pengguna->save($this->request->data)) { $this->Session->setFlash('Data berhasil disimpan'); $this->redirect('/'); } } } }
Akan saya jelaskan kode di atas.
Kita menggunakan variable $uses untuk 'meload' model yang bernama Pengguna yang sudah kita buat sebelumnya. Kode ini wajib ditulis untuk menginisialisasikan program supaya dapat menjalankan model Pengguna. Di dalam function register kita mengecek terlebih dahulu (!empty) apakah data form sudah dikirim? ($this->request->data). Jika sudah, maka simpan data ke dalam model pengguna (save) dan tampilkan laporan "Data berhasil disimpan" dan redirect ke homepage.
Kemudian buatlah folder baru untuk view pada folder /app/View/ dengan nama Member/ , dilanjutkan dengan membuat sebuah file bernama register.ctp (sesuai dengan nama controller Member dan nama function register()). Isi dari file register.ctp adalah:
<h2>Registrasi</h2> <?php echo $this->Form->create('Pengguna'); echo $this->Form->input('nama_lengkap'); echo $this->Form->input('alamat'); echo $this->Form->input('email'); echo $this->Form->input('website'); echo $this->Form->input('username'); echo $this->Form->input('password'); echo $this->Form->submit('Daftar'); echo $this->Form->end(); ?>
Tutorial selesai, temen2 dapat mencobanya dengan membuka URL http://localhost/nama_aplikasi/member/register. Silakan isikan secara salah, maka akan muncul pesan kesalahan di setiap field seperti screenshot di bawah ini.
Dan jika data yang kita masukkan benar (valid), maka akan diteruskan untuk disimpan ke dalam database.
Selamat mencoba
Stand By With Me,
cheyuz@jagocoding.com