0

我的想法:

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

我的控制器代码如下(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;
        }
    }
?>

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

4

1 回答 1

5

首先,PHP 中的零输出(又名空白页)通常意味着存在致命错误,但您的错误报告已关闭。我不打算解释如何正确打开它,您应该能够使用 Google 或 StackOverflow 10 秒钟来弄清楚。

添加自定义验证规则有一种更简单的方法:扩展 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 库进行交互,则该函数可能属于该库本身。

于 2013-05-17T22:29:51.740 回答