升级验证
库文档
变更点
如果你想更改验证错误的显示方式,你需要设置 CI4 的 验证视图模板。
CI4 验证中没有 CI3 中的 回调 <https://codeigniter.org.cn/userguide3/libraries/form_validation.html#id13>。 请使用 Callable Rules (从 v4.5.0 开始)或 Closure Rules (从 v4.3.0 开始)或 Rule Classes 代替。
在 CI3 中,Callbacks/Callable 规则有优先级,但在 CI4 中,Closure/Callable 规则没有优先级,按列出的顺序进行检查。
从 v4.5.0 开始引入了 Callable Rules,但它与 CI3 的 Callable 有些不同。
CI4 验证格式规则不允许空字符串。
CI4 验证永远不会更改你的数据。
从 v4.3.0 开始,引入了
validation_errors()
,但其 API 与 CI3 的不同。
升级指南
在包含表单的视图中进行更改:
<?php echo validation_errors(); ?>
改为<?= validation_list_errors() ?>
在控制器中进行更改:
$this->load->helper(array('form', 'url'));
改为helper('form');
移除
$this->load->library('form_validation');
if ($this->form_validation->run() == FALSE)
改为if (! $this->validateData($data, $rules))
其中$data
是要验证的数据,通常是 POST 数据$this->request->getPost()
。$this->load->view('myform');
改为return view('myform', ['validation' => $this->validator,]);
必须更改验证规则。新语法是在控制器中将规则设置为数组:
<?php $isValid = $this->validateData($data, [ 'name' => 'required|min_length[3]', 'email' => 'required|valid_email', 'phone' => 'required|numeric|max_length[10]', ]);
代码示例
CodeIgniter 3.x 版本
路径: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>
路径: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 4.x 版本
路径: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>
路径:app/Controllers:
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class Form extends Controller
{
public function index()
{
helper('form');
$data = $this->request->getPost();
if (! $this->validateData($data, [
// Validation rules
])) {
return view('myform');
}
return view('formsuccess');
}
}