Ошибки Form_validation в массив

У меня есть код для проверки формы в приложении 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?

Ответы

Ответ 1

Вы просто отождествляете 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

приложения/библиотеки/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 как массив

Ответ 3

Если вы предпочитаете метод библиотеки, вы можете расширить класс Form_validation.

class MY_Form_validation extends CI_Form_validation {

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

}

и затем назовите его в своем контроллере/методе.

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

Ответ 5

Используя последнюю версию codeigniter:

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

возвращает:

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

Ответ 6

Я добавил расширенный помощник проверки формы:

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

Просто используйте...

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

Ответ 8

Решение, которое мне больше всего нравится, не связано с добавлением функции в любом месте или расширением библиотеки проверки:

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

Ссылка: http://thesimplesynthesis.com/post/how-to-get-form-validation-errors-as-an-array-in-codeigniter/

Вы должны иметь возможность называть это в любой точке вашего кода. Кроме того, стоит отметить, что есть предыдущий поток, который также обсуждает это.