[Yii Framework] Menambah Validasi Pada Model dengan Parameter

Sebelumnya saya pernah membahas step-step untuk menambah validasi pada model dalam Yii Framework. Pada kasus sebelumnya saya memaparkan cara membuat validasi yang bisa dibilang masih statis. Statis disini maksudnya adalah kita masih mengeset beberapa parameter secara manual. Contoh, kita tidak bisa mengeset pesan error, tidak bisa mengeset suatu nilai dalam suatu validasi. Pada kasus sebelumnya jika terjadi error maka akan muncul pesan “ga boleh sabit yang post”, padahal kita ingin pesan error tersebut dapat berubah-ubah tanpa harus kita membuat fungsi validasi baru lagi. Nah, bagaimana caranya?? mari kita bahas..

Buatlah fungsi validasi dengan dua buah parameter di dalamnya, yaitu $attribute dan $params :

public function namavalidasi($attribute,$params)
 {
   if($this->$attribute==$params['isi'])
   {
      $this->addError('nama', $params['message']);
      return false;
    }
}

Lalu pada fungsi validasi nya isi seperti berikut :

 array('title','namavalidasi','message'=>'judulnya ga boleh itu','isi'=>'makan'),

Nah, apa yang akan terjadi??

  • Disana terdapat variabel ‘message’=>’judulnya ga boleh itu’. Itu artinya aplikasi akan menampilkan pesan error “judulnya ga boleh itu” jika anda melakukan kesalahan validasi.
  • Lalu terdapat variabel ‘isi’=>makan. Sesuai dengan fungsi validasi di atas, itu artinya attribute “title” tidak diizinkan diinput dengan nilai “makan”. Jika tetap diisi nilai “makan” maka akan di tampilkan pesan error “judulnya ga boleh itu” pada aplikasi dan data tidak akan disimpan.
Nah, dengan cara itu anda dapat bebas bukan menentukan pesan error apa yang akan di tampilkan?? cukup set variabel ‘message’. Anda juga bebas menentukan kata apa yang tidak boleh dimasukkan hanya dengan mengeset variabel ‘isi’.
Selesai.. Selamat mencoba..
Semoga membantu..😀

13 Responses to [Yii Framework] Menambah Validasi Pada Model dengan Parameter

  1. dbormamora says:

    Bit,, kalo yang buat validasinya itu isi dari atribut (misal ada 3 digit, cm mo di-match cm 2 digit aja) itu $params nya bisa dipisah2in ga? atau musti make fungsi substr&preg_match? Thanks Bit

  2. pake fungsi substr & preg_match aja bor mending..

  3. dbormamora says:

    Bit, nanya dong.. Kan gw mau ngecocokin 2 digit dari atribut KIP (ada 7 digit) sama atribut kode_prop, nah gw buat kayak gini di model >>

    public function CekDigit($attribute,$params)
    {
    $attribute=substr($this->kip,0,-7);
    $params=$this->kode_prop;
    if($this->$attribute==$params[‘subject’])
    {
    $this->addError(‘Error’, $params[‘message’]);
    return false;
    }
    }

    trus di rules-nya >>

    array(‘kip’,’cekdigit’,’message’=>’Kode tidak match’,’subject’),

    nah, pas di-create kan gw masukkin ’23xxxxxxx’ niy di KIP, trus error jadi CException gtu..
    tapi errmsgnya Property “perusahaan.23” is not defined.
    kira2 knp ya?
    thanks Bit

  4. 1. itu nilai subject nya belum kau definisiin bor:
    array(‘kip’,’cekdigit’,’message’=>’Kode tidak match’,’subject’), harus nya minimal dia dikasih “subject”=>”….”

    2. Pada fungsi cekdigit, $attribute dan $params kok di set lagi bor? itu nilai nya jangan di set gitu bor.. nilai nya itu udah di tangkep otomatis dari fungsu accesssRule yang udah dibuat tadi..
    Jadi nilai nya udah ketangkep, paling di dalem fungsi itu tinggal kau set validasinya.., mending simpen di variabel baru aja bor..

  5. dbormamora says:

    kan udah dibenerin ya Bit, tapi kok malah ke create ya? harusnya kan ga bisa karena digitnya ga sama (coz kode_prop nya gw buat ’31’)..
    oia rulesnya gw buat macam kek gini..

    -array(‘kip’,’cekdigit’,’message’=>’Kode tidak match’,’isi’=>31),

    trus ‘isi’ itu kan harusnya != subject
    (dimana subject tuh nama var attribute yang tadi lw suruh ganti), gmn ya biar dia dinamis kyk yang diisi di $subject?

  6. coba post code fungsi validasinya sekalian bor..

  7. dbormamora says:

    public function CekDigit($attribute,$params)
    {
    $subject=substr($this->kip,0,-7);
    $pattern=$this->kode_prop;
    if($this->$attribute==$params[‘isi’])
    {
    $this->addError(‘Error’, $params[‘message’]);
    return false;
    }

  8. harus nya kalo digit nya =31 dia error bor..
    biar gampang ngecek nya, coba di echo aja bor nilai $subject nya..

  9. dbormamora says:

    Ga kebaca Bit,, tapi kalo pas ditaruh di view, mau kebaca..
    params ‘isi’ itu bisa dr sql ga sih? ato pake operand..?

  10. dbormamora says:

    Bit, nanya dong, kalo mau ngambil value dr database trus dimasukkin ke dalam textfield tuh pake action apa ya? tengs before

  11. coba liat actionupdate bor..
    disana dia masukin nilai ke dalam textfield..

  12. dbormamora says:

    Gini Bit, kemaren itu kan gw make function js yang onBlur,, nah tapi isian di textfield pemicunya itu dimasukkan manual.. (contoh, kode 31-> muncul D.K.I Jkt).
    Nah,, tapi ni gw mau buat kode 31 itu udah ada di textfield pemicu, dan ketika di-tab, tetep bakal muncul D.K.I Jkt itu.. bisa ga ya Bit?

  13. kemarin aku buat utk ngisi value ke textfield utk punya hani bor.. coba liat punya dia bor.. yosu juga ngerti kayaknya..

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: