Adding custom callback to Codeigniter Form Validation

前端 未结 3 1752
小鲜肉
小鲜肉 2020-12-09 06:47

I want to limit my registration to emails with @mywork.com I made the following in My_Form_validation.

public function email_check($email)
    {
        $fin         


        
相关标签:
3条回答
  • 2020-12-09 07:13

    Are you need validation something like this in a Codeigniter callback function?

    $this->form_validation->set_rules('email', 'email', 'trim|required|max_length[254]|valid_email|xss_clean|callback_spare_email[' . $this->input->post('email') . ']');
    
    if ($this->form_validation->run() == FALSE)
    {
        // failed
        echo 'FAIL';
    }
    else
    { 
        // success
        echo 'GOOD';
    }
    
    function spare_email($str)
    {
    
        // if first_item and second_item are equal
        if(stristr($str, '@mywork.com') !== FALSE)
        {
        // success
        return $str;
        }
        else
        {
        // set error message
        $this->form_validation->set_message('spare_email', 'No match');
    
        // return fail
        return FALSE;
        }
    }  
    
    0 讨论(0)
  • 2020-12-09 07:14

    A correction to Jordan's answer, the language file that you need to edit should be located in

    system/language/english/form_validation_lang.php

    not application/.../form_validation_lang.php. If you create the new file under the application path with the same name, it will overwrite the original in the system path. Thus you will lose all the usage of the original filters.

    0 讨论(0)
  • 2020-12-09 07:16

    The problem with creating a callback directly in the controller is that it is now accessible in the url by calling http://localhost/yourapp/yourcontroller/yourcallback which isn't desirable. There is a more modular approach that tucks your validation rules away into configuration files. I recommend:

    Your controller:

    <?php
    class Your_Controller extends CI_Controller{
        function submit_signup(){
            $this->load->library('form_validation');
            if(!$this->form_validation->run('submit_signup')){
                //error
            }
            else{
                $p = $this->input->post();
                //insert $p into database....
            }
        }
    }
    

    application/config/form_validation.php:

    <?php
    $config = array
    (   
        //this array key matches what you passed into run()
        'submit_signup' => array
        (
            array(
                'field' => 'email',
                'label' => 'Email',
                'rules' => 'required|max_length[255]|valid_email|belongstowork'
            )
            /*
            ,
            array(
                ...
            )
            */
    
        )
        //you would add more run() routines here, for separate form submissions.
    );
    

    application/libraries/MY_Form_validation.php:

    <?php
    class MY_Form_validation extends CI_Form_validation{    
         function __construct($config = array()){
              parent::__construct($config);
         }
         function belongstowork($email){
             $endsWith = "@mywork.com";
             //see: http://stackoverflow.com/a/619725/568884
             return substr_compare($endsWith, $email, -strlen($email), strlen($email)) === 0;
         }
    }
    

    application/language/english/form_validation_lang.php:

    Add: $lang['belongstowork'] = "Sorry, the email must belong to work.";

    0 讨论(0)
提交回复
热议问题