Form_validation错误进入数组

时间:2011-01-13 04:55:46

标签: codeigniter

我在CodeIgniter应用程序中有一个表单验证代码:

$this->load->library('form_validation');

$this->form_validation->set_rules('message', 'Message', 'trim|xss_clean|required');
$this->form_validation->set_rules('email', 'Email', 'trim|valid_email|required');

if($this->form_validation->run() == FALSE)
{
    // some errors
}
else
{
    // do smth
    $response = array(
        'message' => "It works!"
    );
    echo json_encode($response);
}

表单是基于AJAX的,因此前端必须接收带有表单错误的JSON数组,例如:

array (
  'email' => 'Bad email!',
  'password' => '6 symbols only!',
)

如何在CodeIgniter中获取包含表单验证错误的列表或数组?

8 个答案:

答案 0 :(得分:31)

应用/库/ MY_Form_validation.php

<?php
class MY_Form_validation extends CI_Form_validation
{
  function __construct($config = array())
  {
    parent::__construct($config);
  }

  function error_array()
  {
    if (count($this->_error_array) === 0)
      return FALSE;
    else
      return $this->_error_array;
  }
}

然后您可以从控制器中尝试以下操作:

$errors = $this->form_validation->error_array();

参考:validation_errors as an array

答案 1 :(得分:20)

您只需从控制器回显validation_errors()

在您的视图中显示您的javascript place

PHP

// controller code
if ($this->form_validation->run() === TRUE)
{
    //save stuff
}
else
{
    echo validation_errors();
}

的Javascript

// jquery
$.post(<?php site_url('controller/method')?>, function(data) {
  $('.errors').html(data);
});

如果你真的想使用JSON,jquery会自动解析JSON。您可以循环浏览它并append到您的HTML中。


如果您需要验证错误作为数组,您可以将此函数附加到form_helper.php

if (!function_exists('validation_errors_array')) {

   function validation_errors_array($prefix = '', $suffix = '') {
      if (FALSE === ($OBJ = & _get_validation_object())) {
        return '';
      }

      return $OBJ->error_array($prefix, $suffix);
   }
}

答案 2 :(得分:17)

如果您更喜欢库方法,则可以扩展Form_validation类。

class MY_Form_validation extends CI_Form_validation {

    public function error_array() {
        return $this->_error_array;
    }

}

然后在你的控制器/方法中调用它。

$errors = $this->form_validation->error_array();

答案 3 :(得分:8)

使用最新版本的codeigniter:

print_r($this->form_validation->error_array());

返回:

array("field"=>"message","field2"=>"message2");

答案 4 :(得分:3)

只需使用......

$errors = $this->form_validation->error_array();

答案 5 :(得分:2)

来自:http://darrenonthe.net/2011/05/10/get-codeigniter-form-validation-errors-as-an-array/

默认情况下,Codeigniter表单验证错误以字符串形式返回:

返回validation_errors();;

答案 6 :(得分:1)

我已经扩展了表单验证助手:

if ( ! function_exists('validation_errors_array'))
{
    function validation_errors_array()
    {
        if (FALSE === ($OBJ =& _get_validation_object()))
        {
            return '';
        }
        // No errrors, validation passes!
        if (count($OBJ->_error_array) === 0)
        {
            return '';
        }
        // Generate the error string
        $array = '';
        foreach ($OBJ->_error_array as $key => $val)
        {
            if ($val != '')
            {
                $array[$key]= $val;
            }
        }
        return $array;
    }
}

答案 7 :(得分:-1)

我最喜欢的解决方案不涉及在任何地方添加函数或扩展验证库:

$validator =& _get_validation_object();
$error_messages = $validator->_error_array;

参考:http://thesimplesynthesis.com/post/how-to-get-form-validation-errors-as-an-array-in-codeigniter/

您应该可以在代码中的任何位置调用它。此外,值得注意的还有一个previous thread也讨论过这个问题。