Study
CakePHP

Validasi Lanjutan: Custom Rule & Application Rules

Penjelasan

Selain rule bawaan Validator, CakePHP membedakan dua level aturan: validasi FORMAT data (di validationDefault(), bisa custom lewat add() dengan closure) dan Application Rules — aturan yang butuh CEK KE DATABASE, mis. memastikan email belum dipakai user lain, ditulis terpisah di method buildRules().

Contoh Konsep

<?php

use Cake\ORM\RulesChecker;

public function validationDefault(Validator $validator): Validator
{
    $validator->add('jumlah', 'kelipatanLima', [
        'rule' => function ($value) {
            return $value % 5 === 0;
        },
        'message' => 'Jumlah harus kelipatan 5',
    ]);

    return $validator;
}

public function buildRules(RulesChecker $rules): RulesChecker
{
    $rules->add($rules->isUnique(['email']), ['message' => 'Email sudah dipakai']);

    return $rules;
}

Praktikum

Di ArtikelTable, tambahkan custom rule di validationDefault() untuk field slug yang WAJIB hanya berisi huruf kecil, angka, dan strip (regex sederhana). Tambahkan juga buildRules() yang memastikan slug unik lewat $rules->isUnique(['slug']).

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Aturan yang butuh CEK KE DATABASE (mis. isUnique()) SELALU ditulis di buildRules(), BUKAN di validationDefault() — validationDefault() hanya mengecek FORMAT data mentah tanpa menyentuh database sama sekali, dua tahap ini dijalankan terpisah oleh CakePHP secara berurutan.