我已在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;
}
核心验证规则工作正常,但自定义规则无效。所以请帮助我获得灵魂,它实际上浪费了我的时间。这项工作将更受赞赏。
答案 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