【发布时间】:2016-07-12 13:17:02
【问题描述】:
我不喜欢 codeigniter 的一点是控制器内部的验证逻辑,很容易增加和弄乱代码。为了将这个逻辑与控制器分开,我创建了一个导入 form_validation library 的模型:
Class BS_Validator extends CI_Model
{
protected $rules = array();
protected $fields = array();
# Get keys of fields.
public function getStructure()
{
return array_keys( $this->fields );
}
# Validate $_POST against the rules and fields.
public function validate()
{
$this->load->library('form_validation');
foreach( $this->rules as $key => $rule )
{
$this->form_validation->set_rules( $key, $this->fields[$key], $rule );
}
return $this->form_validation->run( $this );
}
}
对于每个验证,我都扩展了这个类:
class User_Create extends BS_Validator
{
protected $fields = array(
'name' => 'Nome',
'email' => 'Email',
'password' => 'Senha',
'password_repeat' => 'Repetir senha'
);
protected $rules = array(
'name' => 'required|min_length[3]|max_length[50]',
'email' => 'required|min_length[8]|max_length[100]|valid_email|is_unique[users.email]',
'password' => 'required',
'password_repeat' => 'required|callback_password_repeat_check'
);
public function password_repeat_check ($password_repeat)
{
return true;
}
}
一切都像一个魅力,除了自定义验证方法,从不调用。在这种特定情况下,它总是返回 (pasword_repeat_check) 错误。
这个方法被识别该怎么办?
【问题讨论】:
-
为什么没有在配置库中创建
form_validation.php?所以所有的验证规则都将保存在一个位置,它是 codeigniter 的内置函数 -
既然您使用的是 Codeigniter 3 - 您看过 Callable 了吗? codeigniter.com/user_guide/libraries/…
-
是的,它也不起作用。也许这是我创建的包装器
BS_Validator的问题。
标签: php codeigniter validation