2015-06-05 48 views
1

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

is_unique[table.field] 

验证从哪里'$ account_type'来自何方?? – Saty

回答

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 . ']'); 
+0

对不起,如果我的问题有点不清楚。我知道如何传递'u_name'作为参数。我想知道如何通过'account_type'作为参数。 – ChobChub

+0

我的错误,但它仍然是相同的。修改我的答案。 – Craig

+0

我原本没有发布账户类型,但现在意识到这可能是最好的(也可能是唯一的)。这让我感到困惑。谢谢你:) – ChobChub

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; 
    } 
} 

电子邮件的检查唯一的入口,你可以使用codignator

相关问题