2017-02-07 1 views
0

Ich benutze codeigniter 3.Ich habe ein E-Mail-Feld in Form und mit required|callback_is_email_exist rules auf E-Mail. Wenn ich das E-Mail-Feld leer lasse, wird anstelle der erforderlichen Nachricht eine Rückrufnachricht angezeigt. Ich hatte an Codeigniter 2 gearbeitet, es zeigt genau "erforderlich" Nachricht, CI3 Form Validierung nicht ausgeführt Regeln in der Reihenfolge, wenn Callbacks verwendet werden. Im Anschluss an mein Codecoderigniter3 Formular-Validierung Callback-Funktion ruft unnötig


Ausblick: welcome_message

<!DOCTYPE html> 
    <html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <title>Welcome to CodeIgniter</title> 
    </head> 
    <body> 
    <?php echo validation_errors(); ?> 

    <?php echo form_open('Welcome'); ?> 

    <h5>Username</h5> 

    <input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" /> 

    <div><input type="submit" value="Submit" /></div> 
    </form> 
    </body> 
    </html> 

Controller: welcome.php

public function index() 
    { 
     $this->load->helper(array('form', 'url')); 


     $this->load->library('form_validation'); 

     $this->form_validation->set_rules('email', 'Email', 'required|callback_is_email_exist'); 

       if ($this->form_validation->run() == FALSE) 
       { 
        $this->load->view('welcome_message'); 
       } 
       else 
       { 
         echo 'success'; 
       } 
    } 

     public function is_email_exist($str) 
     { 
      // code to check email exist in databse here 
       if (is_email_exist($str) 
       { 
         return TRUE; 
       } 
       else 
       { 
       $this->form_validation->set_message('is_email_exist', 'Email Does not exist'); 
          return FALSE; 
        } 
      } 

erwartete Ausgabe

E-Mail eingereicht


benötigt wird erwartet

Codeingiter 3 in der Regel auszuführen sequence.If gelingt es dann nächste executes.In diesem Fall, wenn ich E-Mail-Feld leer lassen Sie es führt Callback unnötigerweise.So zeigt es falsche Nachricht.Es sollte angezeigt werden E-Mail-Feld ist erforderlich, anstatt E-Mail existiert nicht.

Vielen Dank für Ihr Feedback.

Antwort

1

ich sie so:

Datei erstellen: /application/libraries/MY_form_validation.php

<?php if (!defined('BASEPATH')) { 
    exit('No direct script access allowed'); 
} 
class MY_Form_validation extends CI_Form_validation 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    /** 
    * Your custom validation 
    */ 
    public function is_email_exist($str) 
     { 
      $CI =& get_instance(); 
      // code to check email exist in databse here 
      if ($str=='test') { 
       return true; 
      }else { 
       $this->form_validation->set_message('is_email_exist', 'Email Does not exist'); 
       return FALSE; 
      } 
     } 
} 

/* End of file MY_form_validation.php */ 

/* Location: ./application/libraries/MY_form_validation.php */ 

In Controller (entfernen Rückruf):

... 
$this->form_validation->set_rules('email', 'Email', 'required|is_email_exist'); 
... 

In Controller entfernen Funktion: callback_is_email_exist.

Aber Wenn Sie überprüfen wollen, ob die E-Mail eindeutig zuzuordnen sind, dies zu tun:

In Controller:

... 
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]',['is_unique'=>'Email exist!']); 
... 
+0

Dank Erstellen Rückruf Code setzen in MY_form_validation hat für mich gearbeitet :) –