如何在codeigniter 2.x中创建自定义验证规则,这可以在整个应用程序中常用?
我知道我们可以在控制器中创建回调函数,然后可以在验证规则中使用 -
$this->form_validation->set_rules('user_dob', 'Date of Birth', 'required|callback_validDate|callback_validAge');
现在我们可以在控制器中创建验证功能 -
public function validDate($date) {
$d = DateTime::createFromFormat('d-M-Y', $date);
if ($d && $d->format('d-M-Y') == $date)
return TRUE;
$this->form_validation->set_message('validDate', ' %s is not in correct date format');
return FALSE;
}
但是有一个限制。我只能在特定的控制器内使用此方法。此功能不能用于其他控制器。我将不得不再次编写相同的代码。
为此,我尝试使用给定的验证函数创建帮助文件,但再次没有运气。
那么如何多次使用验证功能,在codeigniter中的公共文件中创建一次?
答案 0 :(得分:1)
我也遇到了同样的问题。所以我遇到了一个创建验证功能的解决方案,在控制器周围都很常见。
使用以下代码
在目录MY_Form_validation.php
中创建文件/application/libraries/
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation {
protected $CI;
function __construct() {
parent::__construct();
$this->CI = & get_instance();
}
function validDate($date) {
$this->CI->form_validation->set_message('validDate', ' %s is not in correct date format');
$d = DateTime::createFromFormat('d-M-Y', $date);
if ($d && $d->format('d-M-Y') == $date)
return TRUE;
return FALSE;
}
}
现在在您的控制器中,您可以将函数名称用作新规则 -
$this->form_validation->set_rules('user_dob', 'Date of Birth', 'required|validDate|validAge');
如果需要,您可以在控制器的构造函数中加载库作为 -
$this->load->library('form_validation');
有关详细信息,请参阅链接 - https://arjunphp.com/custom-validation-rules-codeigniter/