codeigniter validation_errors()为空但ci_form_validation-> _error_array显示我的错误?

时间:2016-03-13 08:48:24

标签: php ajax codeigniter

我已经构建了一个简单的表单验证,我打算将它用于ajax调用,但是现在我似乎无法收到我的错误消息?我知道表单验证器正在运行,而且我仍然可以在ci_form_validation->_error_array中看到我想要的错误,但这是一个受保护的属性:((这是我打印的时候)

表单验证器工作正常!我之前已经使用过这种方法数千次了,但这次我似乎无法得到我的错误信息而且我不明白为什么?我会将代码保持简单,以便进行测试我已经删除了所有内容。

Ajax控制器(已删除部件)

<?if(!defined('BASEPATH'))die();
class Ajax extends MY_Controller{
    public function __construct(){
        //if(!isset($_POST)&&!empty($_POST))redirect('/','refresh');
        parent::__construct();
        //check this site with requested uri or request server url
        $this->con['validation']['add_user']=array(
            array('field'=>'firstname','label'=>'First name','rules'=>'max_length[30]|required|alpha'),
            array('field'=>'lastname','label'=>'Last name','rules'=>'max_length[30]|required|alpha'),
            array('field'=>'email','label'=>'Email address','rules'=>'required|is_unique[users.email]|max_length[150]|valid_email')                     
        );
        //$this->html->set_doc_type('html');//set application json
        //header('Content-Type: application/json');
    }
    public function add_user(){
        if($this->_fv('add_user')){
            $this->load->model('users');
            $result=$result=$this->users->insert($this->input->post('firstname'),$this->input->post('lastname'),$this->input->post('email'));
            //var_dump('hi there');
            echo $result;
        }else{
            var_dump($this->fv);
            var_dump($this->input->post());
            var_dump('returned false');
            var_dump(validation_errors());
            $result=array('firstname'=>form_error('firstname'),'lastname'=>form_error('lastname'),'email'=>form_error('email'));
            echo json_encode($result);
        }
        $this->load->view('index/signup');
        //exit;
    }
}

我的控制器

<?if(!defined('BASEPATH'))die();
class MY_Controller extends CI_Controller{
    public$con;
    public function __construct(){
        parent::__construct();
    }
    public function _fv($form=null){
        if($form==null)return true;
        $this->load->library('form_validation');
        $this->load->library(array('form_validation'=>'fv'));
        $this->fv->set_rules($this->con['validation'][$form]);
        if($this->fv->run()===false){
            return false;
        }else{
            return true;
        }
    }
}

就像我说的,奇怪的是我可以在ci_form_validation对象中看到错误消息,但它不会显示在form_error()validation_errors()中?

我是否错过了自动加载的库或帮助程序?这是我的装载者

$autoload['helper'] = array('url','form'); 
$autoload['libraries'] = array('HTML'=>'html','database','session');
//HTML is my header and footer building library. 

我根本没有收到任何PHP错误消息。一切都按预期工作,我只是没有收到任何错误消息? :&#39;(

我想要的错误信息是is_uniqiue。

["_error_array":protected]=> array(1) { ["email"]=> string(52) "The Email address field must contain a unique value." } 

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我的猜测是我的工作方式出了问题?但我不知道是什么。我有点欺骗我的解决方案,但如果你有任何想法让我知道! :)

<?if(!defined('BASEPATH'))die();
class MY_Form_validation extends CI_Form_validation{
    public function __construct(){
        parent::__construct();
    }
    public function get_errors(){
        return$this->_error_array;
    }
}