Codeigniter表单验证库

时间:2012-08-21 12:08:15

标签: php codeigniter function validation

我正在使用表单验证库但是我遇到了一些我无法解决的问题。

我有几个字段,

我有:

  • page_title =>需要
  • menu_title =>不需要
  • parent_id => null或required

现在如果没有设置menu_title,那么它应该采用page_title的值 然后,我需要检查以确保在给定级别menu_title是唯一的。

所以,

if($menu_title == '')
    $menu_title = $page_title;

return $this->db->
select('menu_title')->
from('cart_categories')->
where(array('menu_title' => $menu_title,
            'parent_id' => $category_parent))->
get()->num_rows() == 0;

但我不知道如何在表单验证库中实际使用它?

1 个答案:

答案 0 :(得分:1)

您需要使用回调函数才能执行此操作。只需定义一个(略微更改代码以适应格式)。请注意,这不是我的头脑(和文档):

public function check_title($string) {
    $this->db->select('menu_title')->from('cart_categories');
    $this->db->where(array('menu_title' => $string,'parent_id' => $this->input->post('category_parent')));
    if ($this->db->get()->num_rows() != 0 {
        $this->form_validation->set_message('check_title', '%s must be unique');
        return FALSE;
    }
    return TRUE;
}

然后设置该特定字段的输入以使用回调:

$this->form_validation->set_rules('menu_title', 'Menu Title', 'callback_check_title');

认为你可以在回调函数名称的左侧添加一个额外的下划线,以确保CI不会路由它(因为它是公共的),只是反映你输入的位置规则的回调名称。不过,我对此并不积极。

至于传递附加字段,因为回调只接受字符串,你可以设置一个类变量。

您也可以自己处理验证,在您的情况下可能更干净。