2013-05-12 149 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