在Codeigniter中使用输入验证的自定义助手

时间:2013-05-12 19:24:45

标签: customization codeigniter-2 helper

我的想法:

  • 创建一个自定义帮助程序,可以在检查输入时加载 最小长度的字段。
  • 将其创建为帮助程序,以便可以在不同的文件中重复使用 并保持整洁有序。

我的控制器代码如下(application / controllers / registration.php):

  • 下面的帮助“错误”是我自己创建的帮助程序正在加载。
  • callback_min_length [2]是我尝试将值发送给辅助函数

    //加载助手         $ this-> load-> helper(array('form','url','error'));

    // 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');
        }
    

我的自定义帮助程序代码(application / helpers / 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;
        }
    }
?>

我没有得到任何输出,甚至没有错误信息。我究竟做错了什么?

1 个答案:

答案 0 :(得分:4)

首先,PHP中的零输出(也称为空白页)通常意味着存在致命错误,但您的错误报告已关闭。我不打算解释如何正确打开它,你应该能够使用Google或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库交互,则该函数可能属于库本身。