1

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

我有几个领域,

我有:

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

现在,如果没有设置 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;

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

4

1 回答 1

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 不会路由它(因为它是公共的),并且只是反映您在规则中输入回调名称的位置。不过,我对此并不乐观。

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

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

于 2012-08-21T12:34:23.973 回答