Di sini akan dipelajari bagaimana cara membuat validasi server pada model untuk form dengan menggunakan framework CakePHP.

Validasi Form dengan CakePHP

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
Setelah kita menentukan rule-rulenya, maka tahap selanjutnya adalah membuat model pada CakePHP untuk tabel pengguna. Yuk kita buat modelnya di /app/Model/ dengan nama file Pengguna.php, dengan isi filenya adalah sebagai berikut:
<?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


About Author

Cecep Yusuf

Hi, my name is Cecep Yusuf. However, in the virtual world I am more likely to use the name Cheyuz, which is an abbreviation of two words "Cecep" and "Yusuf". I am founder of Jagocoding.com, u can view more of me in Cheyuz.com


Comment & Discussions

  • Muhammad Cahya
    Mas, tutorialnya ngga berlanjut lagi ? Saya mau belajar cakephp, dan masih belum ngerti.. :[ terutama untuk buat web adminnya..

    • Cecep Yusuf

      Udah buka ini mas?? [link]http://jagocoding.com/tag/cakephp[/link]


    • Muhammad Cahya

      Udh semua dipelajari, tapi bisa request ngga ? itu kan dasar crud sama validasi udah, selanjutnya mungkin langsung ke implementasi applikasi sebenarnya. contohnya web blog, pembagian applikasi antara public(http://website.com) sama admin (http://website.com/admin).., #susah sekali nyari tutorial cakephp indonesia, ya paling cuma samapai crud,validasi, sama pagination, heeee =P


    • Cecep Yusuf

      Hehehe.. boleh gan, makanya nih, yg bikin tutorial cake cuma ane doang.. ane kadang waktunya susah banget -_- yo wes nanti ane bikin tutorial layoutingnya (templating) itu kan yang penting? sebenernya ke sananya intinya hapalin aja gan librarynya... untuk admin, perlu dipelajari admin routing.. Agan stay aja di jagocoding.com, insya Allah kalo ada waktu ane bikin lagi tutorial cakenya.. FYI situs Jagocoding.com juga ini pake Cakephp :)


    • Muhammad Cahya

      Ya, ditunggu ya... :D Emang yg penting itu templating, buat website biasa sih udh familiar, tapi dengan konsep MVC aku bingung :[ Untuk yg routing admin alhamdulillah udh berhasil (tinggal templating itu, sama autentifikasi(login) :[ ) Btw bisa ngga di folder controller,view sama model di pisahkan dalam folder (public sama admin misal) ? Iya, dari URL jagocoding emang keliatan pake cakePHP =) Terima kasih atas responnya n.n


    • Muhammad Cahya

      Oo, iya saya mau nanya Ditutorial ini kalau mau validasi seperti website, validasi url dan required false, koq masih harus diisi. Trus maaf nih, saya ngga bermaksud tdak baik atau apa, tapi di homepage website cheyuz.com ada notice dan error yang masih terlihat. mungkin Configure::write('debug'...dst) nya bisa dicek, kalo ada org yang ngga baik sangat berbahaya.. //kalo udh baca boleh commnt ini boleh dihapus koq Thanks.. :D


    • Cecep Yusuf

      Sip, nanti saya buat tutorial templatingnya deh.. layouting.. Oh jadi HMVC mksudnya? buat apa dipisahin? kurang berguna juga mas.. untuk URL Jagocoding.com, itu tidak bisa ditebak memakai framework berdasarkan URL yang diliat, karena URLnya sendiri udah saya ubah banyak pake route baru, jadi yang dilihat di atas: /tutorial/145/validasi bla bla bla itu bukan controller tutorial, function 145, dan parameter validasi bla bla, tapi udah diubah.. jadi bukan URL cara melihat situs ini memakai cakephp :) Oia cheyuz.com juga bukan error karena debugnya diset 0 ato 1, tapi karena library dari twitter yg ini udah ga berlaku alias udah jadul, msti diupdate lagi.. nanti diubah klo ada waktunya, suka males.. itu bukan kesalahan cakephp, ada kemungkinan karena versi library twitter API nya kurang update ato server yg ga bisa reach data..


  • Thomas M
    Terima kasih untuk tutorial cakephp nya mas cecep, kali ini saya mengalami error seperti ini : http://localhost/blog/member/register Missing Controller Error: MemberController could not be found. Error: Create the class MemberController below in file: app\Controller\MemberController.php <?php class MemberController extends AppController { } Notice: If you want to customize this error message, create app\View\Errors\missing_controller.ctp formnya tidak muncul, mohon penjelasannya mas kenapa?

  • Wah2 emang nih cake versi 1xx sama 2xx dah beda di codingnya,, manggil css juga dah beda scriptnya,, coba2 mindah laman admin dari versi 1xx ke 2xx btw banyak yg eror, and harus banyak yg di ganti, jadi stress lagii,,,

    • Cecep Yusuf

      haha.. iya gan, sekarang malah ada Cakephp 3.xx :D


  • six3 (Guest)
    maap gan,, sedikit koreksi dari saya.. itu yang file controller nya namanya kok PenggunaController.php seharusnya kan namanya MemberController.php di tutorial agan nama file controller nya sama nama class di controllernya beda gan.. di tempat saya g bisa jalan klo kayak gitu,, CMIIW

  • Hiji Tilu
    hahaha....naha teu konek...??
    padahal..tahap demi tahap di turutan..
    kalo nu sebelum na sukses tentang view edit delete..malahna bisa di modif..
    apa saya nu telmi??maklum FU sigana..tapi seru..ek dicoba deui..tong eleh ku cina...sagala bisa..

  • Please LOGIN before if you want to give the comment.