我制作了一个扩展CI_Form_validation class
的简单类,并将其放在application\libraries\MY_Form_validation.php
中。这是文件中的代码:
<?php
class MY_Form_validation extends CI_Form_validation {
public function __construct(){
parent::__construct();
}
public function uniquekey($str){
if($str == 'anda'){
$this->form_validation->set_message('uniquekey', "The category name has been used");
return false;
} else {
return true;
}
}
}
?>
在另一个名为Category
的类中,我做了$this->load->library('form_validation');
并在验证输入文本框时使用了上面的回调函数。
但是,当我尝试提交表单时,服务器返回了两个错误框,第一个错误说:
Message: Undefined property: MY_Form_validation::$form_validation
Filename: libraries/MY_Form_validation.php
第二个错误说:
Message: Call to a member function set_message() on null
Filename: /opt/lampp/htdocs/onesource_reboot/application/libraries/MY_Form_validation.php
我的代码中出错了什么?我从here读取并使用codeigniter 3.0.4版
我终于做到了,感谢narf和devpro,当我插入单词'anda'并提交表单时,表单验证将返回false并显示所需的错误消息。 我尝试了一些涉及数据库交互的更复杂的验证。我在构造函数中添加了这一行,仍然在同一个类中:
public function __construct(){
parent::__construct();
$this->CI->load->database();
}
并将我的uniquekey
函数更改为:
public function uniquekey($str){
$this->CI->db->select('CategoryName');
$this->CI->db->where('CategoryName', $str);
$result = $this->CI->db->get('category');
if($result->num_rows > 0){
$this->set_message('uniquekey', 'Kategori telah terpakai');
return false;
} else {
return true;
}
}
并提交了表格,这是我得到的结果:
Unable to access an error message corresponding to your field name Kategori.(uniquekey)
现在是什么?
解决。 我不知道这是不是一个错误,但这就是我做的工作。
public function uniquekey($str){
$this->CI->db->select('CategoryName');
$this->CI->db->where('CategoryName', $str);
$result = $this->CI->db->get('category');
$numrows = $result->num_rows();
if(numrows > 0) {
$this->set_message('uniquekey', 'Kategori telah terpakai');
return false;
} else {
return true;
}
}
答案 0 :(得分:1)
您没有检查条件,您在此处指定值:
if($str = 'anda'){
这应该是:
if($str == 'anda'){
=符号用于指定值
== sign用于比较值
答案 1 :(得分:1)
仅从控制器和/或模型内部使用$this->form_validation
。
当你进入库本身时,你处于一个不同的范围,form_validation
属性不存在......而你首先不需要它 - 你只需要使用{ {1}},所以$this
代替$this->set_message()
。
了解OOP的工作原理:http://www.php.net/manual/en/language.oop5.basic.php