CodeIgniter自定义验证库函数不起作用

时间:2013-11-25 09:28:15

标签: codeigniter function validation

我已在MY_Form_validation中将自定义验证库类MY_Form_validation.php创建为application/libraries,如下所示。

<?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;

} 

核心验证规则工作正常,但自定义规则无效。所以请帮助我获得灵魂,它实际上浪费了我的时间。这项工作将更受赞赏。

3 个答案:

答案 0 :(得分:0)

检查函数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'
        ),
    );

我认为好的不是php函数或内部codeigniter函数。

编辑:

如何使用:

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

而不是

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

使用===表示值必须为整数0,但如果$ file ['size']返回0作为字符串,则if将不为true,并且该函数将始终返回true。

答案 1 :(得分:0)

据我所知,你的功能总是回归真实。因为$ file不是$ _FILES

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;
}

答案 2 :(得分:0)

我遇到了同样的问题,并在查看CodeIgniter的源代码时找到了原因。似乎作家认为如果一个领域没有&#34; required&#34;那么它将跳过所有规则并始终返回表单已经验证。从他们的代码中亲自看到它:

// If the field is blank, but NOT required, no further tests are necessary
if ( ! in_array('required', $rules) AND is_null($postdata))

但是,如果你添加&#34;回调_&#34;在你的规则面前,你仍然可以让它运行,对于程序,请看这里: https://www.codeigniter.com/userguide2/libraries/form_validation.html#callbacks