2013-05-12 136 views
0

輸入驗證我的想法:自定義助手與笨

  • 創建可能檢查分鐘長度的輸入 場時加載自定義幫手。
  • 創建它作爲幫手,以便它可以在不同的文件中重新使用 並保持它的組織和清潔。

下面我控制器代碼(應用/控制器/ registration.php的):

  • 助手 「錯誤」 下面是正裝我自己創建的幫手。
  • callback_min_length [2]是我嘗試的值發送到所述輔助函數

    //加載輔助 $這 - >負載>輔助(陣列( '表格', 'URL', '錯誤' ));

    // Load library 
    $this->load->library('form_validation'); 
    
        // Set form rules 
        $rules = array(
            array(
             'field' => 'firstName', 
             'label' => 'firstName', 
             'rules' => 'callback_min_length[2]|trim' 
            ) 
           ); 
    
        $this->form_validation->set_rules($rules); 
    
        // Set custom error messages 
    
        if ($this->form_validation->run() == FALSE) 
        { 
         $this->load->view('header'); 
         $this->load->view('view_registration'); 
         $this->load->view('footer'); 
        } 
        else 
        { 
         $this->load->view('header'); 
         $this->load->view('view_registration'); 
         $this->load->view('footer'); 
        } 
    

下面我定製的助手代碼(應用程序/傭工/ error_helper.php):

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

    function min_length($str, $val) { 

     // Load CI instance to be able to load library 
     $ci =& get_instance(); 

     // Load library 
     $ci->load->library('form_validation'); 

     if (preg_match("/[^0-9]/", $val)) { 
      return FALSE; 
     } 
     if (function_exists('mb_strlen')) { 
      if(mb_strlen($str) < $val) { 
       $ci->form_validation->set_message('custom_min_length', 'You have to write at least ' . $val . ' characters'); 
       return FALSE; 
      } else { 
       return TRUE; 
      } 
     } 
     if(strlen($str) < $val) { 
      $ci->form_validation->set_message('custom_min_length', 'You have to write at least ' . $val . ' characters'); 
      return FALSE; 
     } else { 
      return TRUE; 
     } 
    } 
?> 

我沒有得到任何輸出什麼那麼,甚至沒有錯誤消息。我究竟做錯了什麼?

回答

3

首先,PHP中的零輸出(又名空白頁)通常意味着存在致命錯誤,但您的錯誤報告已關閉。我不打算解釋如何正確打開它,你應該能夠使用谷歌或StackOverflow來解決這個問題10秒鐘。

還有一個MUCH更簡單的方法來添加自定義驗證規則:擴展Form_validation庫。

應用程序/庫/ MY_Form_validation.php:

<?php 

class MY_Form_validation extends CI_Form_validation { 

    /** 
    * Custom minimum string length validation. 
    */ 
    public function min_strlen($input, $min_length) { 

     $this->set_message('min_strlen', 'Error Message Here'); 

     // Your strlen logic here, returns TRUE or FALSE 
    } 
} 

嚴重的是,就是這樣。沒有回調,沒有幫手。然後,您的新規則被稱爲就像任何其他形式的驗證規則,例如:

$this->form_validation->set_rules('field', 'My Field', 'required|min_strlen[5]|trim'); 

如果要覆蓋這一個默認min_length規則,只要命名的新方法相同。它將優先於原件。

需要記住的事情:如果您發現自己立即調用和/或與助手中的CI庫進行交互,該函數可能屬於庫本身。

+0

超好的解釋。謝謝! – Robert 2013-05-18 20:54:43