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中的错误日志,以查看代码是否有任何错误。