我的表单输入需要一个特定的规则,所以我扩展了库,如下所示:
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation
{
function __construct($config = array())
{
parent::__construct($config);
}
//.............
}
所以这对我来说很好,但现在我注意到,如果验证函数,例如这个:
public function is_sentence($str)
{
if (!preg_match("/^[a-zA-Z0-9-?._ -]+$/", $str))// Alpha, Int, Basic Punctuation, Hyphens, Underscores, Spaces
{
$this -> set_message('is_sentence', 'The %s field can only contain letters, digits, spaces, dashes and periods.');
return FALSE;
}
}
事实上,return TRUE
(意味着它只包含句子字符)验证将通过CodeIgniter的run(),但其他形式的验证将失败。这就是问题的开始,form_helper中的set_value()函数不再工作,使用is_sentence规则的输入字段为空。
这是我第一次扩展这个库,我就是无法通过这个问题。
所以总结一下:
如果使用自定义验证函数,如果除了自定义验证之外的所有其他表单输入的验证都失败,则自定义验证的setvalue()将不再响应。
现在,如果我故意在is_sentence的验证中导致错误,那么set_value()会按预期工作!
同样,对于使用默认验证规则的其他form_input(例如"interger"),这种异常不会发生。
我被难住了,任何帮助都将不胜感激。
我遇到的问题是我不想返回true。这样修复:
public function is_sentence($str)
{
if (!preg_match("/^[a-zA-Z0-9-?._ -]+$/", $str))// Alpha, Int, Basic Punctuation, Hyphens, Underscores, Spaces
{
$this -> set_message('is_sentence', 'The %s field can only contain letters, digits, spaces, dashes and periods.');
return FALSE;
} else {
return TRUE;
}
}