CodeIgniter自定义验证库函数不工作

CodeIgniter自定义验证库函数不工作,codeigniter,function,validation,Codeigniter,Function,Validation,我已经在application/libraries中创建了自定义验证库类MY\u Form\u validation作为MY\u Form\u validation.php,如下所示 <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class MY_Form_validation extends CI_Form_validation { public function __con

我已经在
application/libraries
中创建了自定义验证库类
MY\u Form\u validation
作为
MY\u Form\u validation.php
,如下所示

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


class MY_Form_validation extends CI_Form_validation {

    public function __construct($rules = array()) {
          parent::__construct($rules);
    }

    public function file_required($file) {


          if($file['size']===0) {
              $this->set_message('file_required', 'Uploading a file for %s is required.');
              return false;
          }

          return true;
    }
}

?>
public function validate() {

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

    $config = array(
        array(
            'field' => 'name',
            'label' => 'Name',
            'rules' => 'trim|required|xss_clean'
        ),
        array(
            'field' => 'display_photo',
            'label' => 'Display Photo',
            'rules' => 'trim|good|file_required|xss_clean'
        ),
    );

    $this->form_validation->set_rules($config);

    if ($this->form_validation->run()) {
        return true;
    }
    return false;

} 

核心验证规则工作正常,但自定义规则不工作。所以,请帮我弄到这个灵魂,这简直是在浪费我的时间。这项工作将更受欢迎。

检查函数validate()中的规则

我认为这是不正确的:

$config = array(
        array(
            'field' => 'name',
            'label' => 'Name',
            'rules' => 'trim|required|xss_clean'
        ),
        array(
            'field' => 'display_photo',
            'label' => 'Display Photo',
            'rules' => 'trim|good|file_required|xss_clean'
        ),
    );
我认为是正确的:

$config = array(
        array(
            'field' => 'name',
            'label' => 'Name',
            'rules' => 'trim|required|xss_clean'
        ),
        array(
            'field' => 'display_photo',
            'label' => 'Display Photo',
            'rules' => 'trim|file_required|xss_clean'
        ),
    );
我认为good不是一个php函数,也不是一个内部codeigniter函数

编辑:

如何使用:

if ($file['size'] == 0) {
而不是

if ($file['size'] === 0) {

使用===意味着值必须是整数0,但如果$file['size']以字符串形式返回0,则if将不为true,函数将始终返回true。

据我所知,函数始终返回true。因为$file不是$\u文件

public function file_required($file) {
    if($_FILES[$file]['size']===0) {
        $this->set_message('file_required', 'Uploading a file for %s is required.');
        return false;
    }
    return true;
}

我在查看CodeIgniter的源代码时发现了相同的问题并找到了原因。似乎作者认为,如果一个字段没有“必需”,那么它将跳过所有规则并始终返回表单已验证。从他们的代码中可以看到:

// If the field is blank, but NOT required, no further tests are necessary
if ( ! in_array('required', $rules) AND is_null($postdata))
但是,如果您在规则前面添加了“callback_”,您仍然可以使其运行,对于该过程,请参见此处:

它还不起作用。。即使是回显也不会显示任何内容。请检查apache中的错误日志,或激活codeigniter中的错误日志,以查看代码是否有任何错误。