Setelah selesai dengan Cara Menghapus Data Pada Codeigniter 4 #10 dan Cara Mengubah Data Pada Codeigniter 4 #11 sekarang fokus kita adalah bagaimana cara upload file berupa gambar pada halaman tambah data, langkah awalnya kita edit terlebih dahulu file create.php pada folder Views\buku\crud\create.php , Langkah pertama silahkan edit pada bagian sampul, buat seperti code dibawah :
<!-- Cara Upload File Pada Codeigniter 4 #12 -->
<div class="row mb-3">
<label for="cover" class="col-sm-2 col-form-label">Cover</label>
<div class="col-sm-10">
<input class="form-control <?= ($validation->hasError('cover')) ? 'is-invalid' : ''; ?>" type="file" id="cover" name="cover">
<div id="validationServer03Feedback" class="invalid-feedback">
<?= $validation->getError('cover'); ?>
</div>
</div>
</div>
<!-- End -->
Setelah itu pada form tambahkan enctype agar form bisa bekerja dengan GET, POST dan FILES, code nya seperti berikut :
enctype="multipart/form-data"
Maka hasilnya seperti gambar berikut :
Setelah itu modifikasi code yang ada methode simpan pada controller Crud.php seperti code dibawah ini :
public function simpan()
{
// 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'
]
],
// untuk validasi gambar bisa cek pada dokumentasi codeigniter https://www.codeigniter.com/user_guide/libraries/validation.html
'cover' => [
'rules' => 'uploaded[cover]|is_image[cover]|mime_in[cover,image/jpg,image/jpeg,image/png]',
'errors' => [
'uploaded' => 'Cover buku harus dipilih.',
'is_image' => 'Yang anda pilih bukan gambar.',
'mime_in' => 'Cover buku harus berekstensi png,jpg,gif.'
]
]
])) {
//$validation = \Config\Services::validation();
//return redirect()->to('/crud/create')->withInput()->with('validation', $validation);
return redirect()->to('/crud/create')->withInput();
}
//ambil terlebih dulu gambarnya
$fileCover = $this->request->getFile('cover');
//lalu pindahkan file kedalam folder img
$fileCover->move('img');
//ambil nama file cover
$namaCover = $fileCover->getName();
// rl_title digunakan untuk membuat field slug pada database terisi otomatis
$slug = url_title($this->request->getVar('judul'), '-', true);
$this->BukuModel->save([
'judul' => $this->request->getVar('judul'),
'slug' => $slug,
'penulis' => $this->request->getVar('penulis'),
'penerbit' => $this->request->getVar('penerbit'),
'cover' => $namaCover
]);
session()->setFlashdata('pesan', 'Data berhasil ditambahkan.');
return redirect()->to('/buku');
}
Maka hasilnya akan seperti gambar dibawah ini :
Untuk membuat file sampul cover tidak harus di isi kita bisa menggunakan gambar default yang kita inginkan, yaitu dengan cara sebagai berikut :
public function simpan()
{
// 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'
]
],
// untuk validasi gambar bisa cek pada dokumentasi codeigniter https://www.codeigniter.com/user_guide/libraries/validation.html
'cover' => [
'rules' => 'is_image[cover]|mime_in[cover,image/jpg,image/jpeg,image/png]',
'errors' => [
//'uploaded' => 'Cover buku harus dipilih.',
'is_image' => 'Yang anda pilih bukan gambar.',
'mime_in' => 'Cover buku harus berekstensi png,jpg,gif.'
]
]
])) {
//$validation = \Config\Services::validation();
//return redirect()->to('/crud/create')->withInput()->with('validation', $validation);
return redirect()->to('/crud/create')->withInput();
}
//VERSI GAMBAR WAJIB DI UPLOAD
//ambil terlebih dulu gambarnya
//$fileCover = $this->request->getFile('cover');
//lalu pindahkan file kedalam folder img
//$fileCover->move('img');
//ambil nama file cover
//$namaCover = $fileCover->getName();
//VERSI GAMBAR TIDAK WAJIB DI UPLOAD DAN LANGSUNG DI RENAME
//ambil terlebih dulu gambarnya
$fileCover = $this->request->getFile('cover');
//cek apakah tidak ada gambar yang di upload
if ($fileCover->getError() == 4) {
$namaCover = 'default.png';
} else {
//generate nama cover acak
$namaCover = $fileCover->getRandomName();
//pindahkan file cover
$fileCover->move('img', $namaCover);
}
// rl_title digunakan untuk membuat field slug pada database terisi otomatis
$slug = url_title($this->request->getVar('judul'), '-', true);
$this->BukuModel->save([
'judul' => $this->request->getVar('judul'),
'slug' => $slug,
'penulis' => $this->request->getVar('penulis'),
'penerbit' => $this->request->getVar('penerbit'),
'cover' => $namaCover
]);
session()->setFlashdata('pesan', 'Data berhasil ditambahkan.');
return redirect()->to('/buku');
}
Hasilnya adalah seperti gambar dibawah ini :