CodeIgniter将第二个参数传递给回调

时间:2015-06-05 11:48:29

标签: php codeigniter

在我的数据库中,我有多种类型的用户,具体取决于有人注册的帐户类型。我创建了一个验证规则,检查某人注册的用户名或电子邮件是否在数据库中,但是我需要能够检查数据库中的正确表。

function create_account($account_type){
    $this->load->library('form_validation');

    $this->form_validation->set_rules('f_name','First Name','trim|required');
    $this->form_validation->set_rules('l_name','Last Name','trim|required');
    $this->form_validation->set_rules('u_name','Username','trim|required|min_length[6]|max_length[30]|callback_check_if_username_exists');
    $this->form_validation->set_rules('email','Email','trim|required|valid_email|callback_check_if_email_exists');
}

我的检查用户名回调包含两个参数:username和account_type。在线帮助仅讨论传递立即值或其他帖子值。如何将account_type传递给回调?

function check_if_username_exists($name,$account_type){
    $this->load->model('membership_model');

    $username_available = $this->membership_model->check_if_username_exists($name,$account_type);

    if($username_available){
        return true;
    }
    else {
        return false;
    }
}

2 个答案:

答案 0 :(得分:2)

来自用户指南:

  

要调用回调,只需将方法名称放在规则中,并使用“callback_”作为规则前缀。如果你需要在回调方法中接收一个额外的参数,只需在方括号之间的方法名之后正常添加,如:“callback_foo ** [bar] **”,那么它将作为你的第二个参数传递回调方法。

http://www.codeigniter.com/userguide3/libraries/form_validation.html#callbacks-your-own-validation-methods

所以,你会这样做的;

    $this->form_validation->set_rules('u_name','Username','trim|required|min_length[6]|max_length[30]|callback_check_if_username_exists[' . $account_type . ']');

答案 1 :(得分:1)

您可以直接传递

function check_if_username_exists(){

    $email = $this->input->post('email');// like this way
    $account_type = $this->input->post('account_type');// like this way
    $this->load->model('membership_model');

    $username_available = $this->membership_model->check_if_username_exists($name,$account_type);

    if($username_available){
        return true;
    }
    else {
        return false;
    }
}

另外,为了检查电子邮件的唯一输入,您可以使用

   is_unique[table.field]

验证编码人