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']).
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.