Form Validasi Pada Saat Insert Data Pada Codeigniter 4 #9

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 :