代码之家  ›  专栏  ›  技术社区  ›  Lukas Oppermann

库中的CodeIgniter验证不接受回调

  •  4
  • Lukas Oppermann  · 技术社区  · 14 年前

    我的问题是:我正在编写一个登录库。 这个库有一个函数validation(),它使用验证库来验证数据。 使用普通的验证方法,它工作得很好,但是使用回调函数却不起作用。它没有被调用。

    我这样称呼它。

    $this->CI->form_validation->set_rules('user', 'Username', 'required|callback__check_user');
    

    函数名为“check”user,它使用用户名“check”user($user)。 函数本身工作正常,我也可以在类中调用它($this->&u check_user('username'))并给出一个工作结果。

    我猜可能有问题,因为我不在控制器中工作,所以我有一个CI实例$this->CI,而不仅仅是原始实例$this->

    有人知道怎么解决这个问题吗?

    事先谢谢。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Lukas Oppermann    14 年前

    嘿,我想出了一个适合我的方法。只需在my-form-validation.php中扩展表单验证库,就可以创建自定义验证方法。我认为这是一种干净的方法,而且效果非常好。我构建下面的验证方法来检查现有用户名和密码。$value类似于table\u name.fieldname。 我没有设置消息,因此它将使用来自lang文件的现有消息。

    /**
     * Exist
     *
     * checks if the entry exists in the database
     * returns a boolean
     *
     * @access  private
     * @param   string
     * @param   field
     * @return  boolean
     */
    function _exist($str, $value)
    {       
        list($table, $column) = explode('.', $value, 2);    
        $query = $this->CI->db->query("SELECT COUNT(*) AS count FROM $table WHERE $column = '$str'");
        $row = $query->row();
        return ($row->count > 0) ? TRUE : FALSE;
    }
    

    不过,谢谢你的帮助。

        2
  •  0
  •   bschaeffer    14 年前

    表单验证回调将只对当前控制器内的方法激发。

    只需在使用回调的控制器中执行此操作:

    function _check_user($user)
    {
        $this->load->model('login');
        $result = $this->login->_check_user($user);
        return $result;
    }