Upgrade Validations
Documentations of Library
What has been changed
If you want to change validation error display, you have to set CI4 validation View templates.
CI4 validation has no Callbacks nor Callable in CI3. Use Rule Classes or Closure Rule instead.
In CI3, Callbacks/Callable rules were prioritized, but in CI4, Closure Rules are not prioritized, and are checked in the order in which they are listed.
CI4 validation format rules do not permit empty string.
CI4 validation never changes your data.
Since v4.3.0,
validation_errors()
has been introduced, but the API is different from CI3’s.
Upgrade Guide
Within the view which contains the form you have to change:
<?php echo validation_errors(); ?>
to<?= validation_list_errors() ?>
Within the controller you have to change the following:
$this->load->helper(array('form', 'url'));
tohelper(['form', 'url']);
remove the line
$this->load->library('form_validation');
if ($this->form_validation->run() == FALSE)
toif (! $this->validate([]))
$this->load->view('myform');
toreturn view('myform', ['validation' => $this->validator,]);
You have to change the validation rules. The new syntax is to set the rules as array in the controller:
<?php $isValid = $this->validate([ 'name' => 'required|min_length[3]', 'email' => 'required|valid_email', 'phone' => 'required|numeric|max_length[10]', ]);
Code Example
CodeIgniter Version 3.x
Path: application/views:
<html>
<head>
<title>My Form</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open('form'); ?>
<h5>Username</h5>
<input type="text" name="username" value="" size="50" />
<h5>Password</h5>
<input type="text" name="password" value="" size="50" />
<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />
<h5>Email Address</h5>
<input type="text" name="email" value="" size="50" />
<div><input type="submit" value="Submit" /></div>
</form>
</body>
</html>
Path: application/controllers:
<?php
class Form extends CI_Controller {
public function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
// Set validation rules
if ($this->form_validation->run() == FALSE) {
$this->load->view('myform');
} else {
$this->load->view('formsuccess');
}
}
}
CodeIgniter Version 4.x
Path: app/Views:
<html>
<head>
<title>My Form</title>
</head>
<body>
<?= validation_list_errors() ?>
<?= form_open('form') ?>
<h5>Username</h5>
<input type="text" name="username" value="" size="50" />
<h5>Password</h5>
<input type="text" name="password" value="" size="50" />
<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />
<h5>Email Address</h5>
<input type="text" name="email" value="" size="50" />
<div><input type="submit" value="Submit" /></div>
</form>
</body>
</html>
Path: app/Controllers:
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class Form extends Controller
{
public function index()
{
helper(['form', 'url']);
if (! $this->validate([
// Validation rules
])) {
return view('myform');
}
return view('formsuccess');
}
}