Agar form input tidak bisa di inputkan data sembarangan, maka diperlukan validasi agar lebih aman. Caranya adalah dengan menambahkan validas pada controller Crud.php di method simpan seperti berikut ini :
// validasi input
if (!$this->validate([
'judul' => 'required|is_unique[buku.judul]'
])) {
$validation = \Config\Services::validation();
return redirect()->to('/crud/create')->withInput()->with('validation', $validation);
}
Setelah itu buat vlidasi tadi agar bisa ditangkap di halaman create, tambahkan code berikut pada controller create
session();
$data = [
'title' => 'Form Tambah Data Buku',
'validation' => \Config\Services::validation()
];
Selanjutnya supaya hasil validasi bisa ditampilkan, tambahkan code berikut pada file create.php di folder views\buku\crud seperti berikut :
<?= $validation->listErrors(); ?>
maka hasilnya seperti gambar dibawah ini :
Agar session(); bisa djalankan di setiap contorller, maka pindahkan session(); pada BaseController.php
Selanjutnya kita akan merapikan hasil validasi tersebut agar bisa berada pada masing-masing inputan dengan cara memanfaatkan class yang ada pada bootstrap yaitu is-valid dan is-invalid, tambah code berikut pada file cretae.php
<div class="row mb-3">
<label for="judul" class="col-sm-2 col-form-label">Judul</label>
<div class="col-sm-10">
<input type="text" class="form-control <?= ($validation->hasError('judul')) ? 'is-invalid' : ''; ?>" id="judul" name="judul" autofocus>
<div id="validationServer03Feedback" class="invalid-feedback">
<?= $validation->getError('judul'); ?>
</div>
</div>
</div>
Hasilnya adalah
Supaya pesan eror bisa kita ubah, lakukan langkah berikut:
// validasi input
if (!$this->validate([
'judul' => [
'rules' => 'required|is_unique[buku.judul]',
'errors' => [
'required' => '{field} buku harus di isi.',
'is_unique' => '{field} buku sudah terdaftar'
]
]
])) {
$validation = \Config\Services::validation();
return redirect()->to('/crud/create')->withInput()->with('validation', $validation);
}
Hasilnya adalah sebagai berikut
Selanjutnya, agar inputan yang sudah di isi tidak hilang ketika error tambahkan methode old di setiap inputan, tambahkan pada file create.php seperti berikut :
value="<?= old('judul'); ?>"
Lakukan pada setiap inputan, nanti hasilnya sebagai berikut :