Hi! i'm using CI 4.3.6, there was a problem regarding file validation.
View (/komik/create)
Code:
<?= $this->extend('layout/template'); ?>
<?= $this->section('content') ?>
<div class="container">
<div class="row">
<div class="col-8">
<h2 class="my-3">Form Tambah Data Komik</h2>
<form action="/komik/save" method="post" enctype="multipart/form-data">
<?= csrf_field(); ?>
<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 value="<?= old('judul') ?>" required>
<div class="invalid-feedback">
<?= $validation->getError('judul'); ?>
</div>
</div>
</div>
<div class="row mb-3">
<label for="penulis" class="col-sm-2 col-form-label">Penulis</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="penulis" name="penulis" value="<?= old('penulis') ?>" required>
</div>
</div>
<div class="row mb-3">
<label for="penerbit" class="col-sm-2 col-form-label">Penerbit</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="penerbit" name="penerbit" value="<?= old('penerbit') ?>" required>
</div>
</div>
<div class="row mb-3">
<label for="sampul" class="col-sm-2 col-form-label">Sampul</label>
<div class="col-sm-10">
<input class="form-control <?= ($validation->hasError('sampul')) ? 'is-invalid' : '' ?>" type="file" id="sampul" name="sampul">
<div class="invalid-feedback">
<?= $validation->getError('sampul'); ?>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">Tambah Data</button>
</form>
</div>
</div>
</div>
<?= $this->endSection() ?>
Controller (Komik), the relevant part
PHP Code:
<?php
namespace App\Controllers;
use App\Models\KomikModel;
class Komik extends BaseController {
protected $komikModel;
public function __construct() {
$this->komikModel = new KomikModel();
}
public function create() {
$validation = (isset(session()->validation))? session()->validation : \Config\Services::validation();
$data = [
'title' => 'Form Tambah Data Komik',
'validation' => $validation
];
unset(session()->validation);
return view('/komik/create', $data);
}
public function save() {
$rules = [
'judul' => [
'rules' => 'required|is_unique[komik.judul]',
'errors' => [
'required' => 'Judul komik harus diisi',
'is_unique' => 'Judul komik sudah terdaftar'
]
],
'sampul' => 'uploaded[sampul]'
];
if (!$this->validate($rules)) {
session()->setFlashdata('validation', $this->validator);
dd(session()->validation);
return redirect()->to('/komik/create')->withInput();
}
// If success, save to database
return redirect()->to('/komik');
}
}
session(); i save in BaseController
Routes, the relevant part
Code:
$routes->get('/komik/create', 'Komik::create');
$routes->post('/komik/save', 'Komik::save');
------------------------------------------------------------------------
If without file validation :
Code:
'sampul' => 'uploaded[sampul]'
application runs smoothly (only text validation), I get the desired error message.
When I add file input validation, all session lost.
I check session()->validation
Error sentence:
Fatal error: Uncaught Exception: Serialization of 'CodeIgniter\HTTP\Files\UploadedFile' is not allowed in [no active file]:0 Stack trace: #0 [internal function]: session_write_close() #1 {main} thrown in [no active file] on line 0
Can anyone help?
Thank you