Codeigniter:未执行自定义验证
Codeigniter: Custom validation is not executed
我正在尝试创建我的自定义验证,如果选择了某个选项,则需要客户 ID。现在,我只想测试自定义验证是否有效,所以我不关心选项,只设置消息并且始终 return false。出于 MVC 模式的原因,我不想将验证放在我的控制器中。如果我的自定义验证放在模型中,它就不起作用,所以我在名为 MY_Form_validation.
的库文件夹中创建了一个新的验证文件
MY_Form_validation.php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation
{
protected $CI;
function __construct($rules = array())
{
parent::__construct($rules);
}
public function customer_required($str)
{
$this->set_message('customer_required', 'Customer is required if you choose option A');
return false;
}
}
在模型中,我这样称呼它:
public function save()
{
/* other form validation */
$this->form_validation->set_rules('customer_id', 'Customer', 'customer_required');
return $this->form_validation->run();
}
我也放在了自动加载
$autoload['libraries'] = array('session','database','table','form_validation', 'MY_Form_validation');
它应该总是无法保存,因为只有验证 return 错误。但看起来自定义验证根本没有执行,因为它总是 return true。我错过了什么吗?已经好几天了,我仍然不知道我哪里做错了。请帮忙。
更新
正如 Marleen 所建议的,我尝试使用 callable,但又一次,函数 check_customer 似乎没有执行,因为我已成功保存。
Customer_model
$this->form_validation->set_rules('customer_is_required', array($this->customer_model, 'check_customer'));
$this->form_validation->set_message('customer_is_required', 'Customer is required of you choose option A');
private function check_customer()
{
return false;
}
您的方法未被触发,因为您的 customer_id
字段提交为空。 Codeigniter 不会验证空字段,除非规则是 required
/isset
/matches
或回调或可调用规则之一。 (参见 Form_validation.php
第 700 行。)
如果您将规则指定为可调用规则,它可以保留在模型中并执行,即使提交的字段为空:
$this->form_validation->set_rules('customer_id', 'Customer', array(
array($this->your_model, 'customer_required')
));
(另请参阅:https://codeigniter.com/userguide3/libraries/form_validation.html#callable-use-anything-as-a-rule)
$this->form_validation->set_rules('customer_is_required', 'Customer', array(
array($this->customer_model, 'check_customer')
));
public function check_customer($str) {
return false;
}
要添加消息,请使用:
$this->form_validation->set_rules('customer_is_required', 'Customer', array(
array('customer_is_required', array($this->customer_model, 'check_customer'))
));
$this->form_validation->set_message('customer_is_required', 'Customer is required of you choose option A');
我正在尝试创建我的自定义验证,如果选择了某个选项,则需要客户 ID。现在,我只想测试自定义验证是否有效,所以我不关心选项,只设置消息并且始终 return false。出于 MVC 模式的原因,我不想将验证放在我的控制器中。如果我的自定义验证放在模型中,它就不起作用,所以我在名为 MY_Form_validation.
的库文件夹中创建了一个新的验证文件MY_Form_validation.php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation
{
protected $CI;
function __construct($rules = array())
{
parent::__construct($rules);
}
public function customer_required($str)
{
$this->set_message('customer_required', 'Customer is required if you choose option A');
return false;
}
}
在模型中,我这样称呼它:
public function save()
{
/* other form validation */
$this->form_validation->set_rules('customer_id', 'Customer', 'customer_required');
return $this->form_validation->run();
}
我也放在了自动加载
$autoload['libraries'] = array('session','database','table','form_validation', 'MY_Form_validation');
它应该总是无法保存,因为只有验证 return 错误。但看起来自定义验证根本没有执行,因为它总是 return true。我错过了什么吗?已经好几天了,我仍然不知道我哪里做错了。请帮忙。
更新
正如 Marleen 所建议的,我尝试使用 callable,但又一次,函数 check_customer 似乎没有执行,因为我已成功保存。
Customer_model
$this->form_validation->set_rules('customer_is_required', array($this->customer_model, 'check_customer'));
$this->form_validation->set_message('customer_is_required', 'Customer is required of you choose option A');
private function check_customer()
{
return false;
}
您的方法未被触发,因为您的 customer_id
字段提交为空。 Codeigniter 不会验证空字段,除非规则是 required
/isset
/matches
或回调或可调用规则之一。 (参见 Form_validation.php
第 700 行。)
如果您将规则指定为可调用规则,它可以保留在模型中并执行,即使提交的字段为空:
$this->form_validation->set_rules('customer_id', 'Customer', array(
array($this->your_model, 'customer_required')
));
(另请参阅:https://codeigniter.com/userguide3/libraries/form_validation.html#callable-use-anything-as-a-rule)
$this->form_validation->set_rules('customer_is_required', 'Customer', array(
array($this->customer_model, 'check_customer')
));
public function check_customer($str) {
return false;
}
要添加消息,请使用:
$this->form_validation->set_rules('customer_is_required', 'Customer', array(
array('customer_is_required', array($this->customer_model, 'check_customer'))
));
$this->form_validation->set_message('customer_is_required', 'Customer is required of you choose option A');