Ошибки Form_validation в массив - PullRequest
       4

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

15 голосов
/ 13 января 2011

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

31 голосов
/ 17 декабря 2011

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

21 голосов
/ 13 января 2011

Вы просто получаете эхо 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);
   }
}
18 голосов
/ 30 апреля 2013

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

class MY_Form_validation extends CI_Form_validation {

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

}

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

$errors = $this->form_validation->error_array();
8 голосов
/ 01 июня 2017

Использование последней версии codeigniter:

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

возвращает:

array("field"=>"message","field2"=>"message2");
3 голосов
/ 25 сентября 2017

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

$errors = $this->form_validation->error_array();
2 голосов
/ 03 октября 2013

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

По умолчанию ошибки проверки формы Codeigniter возвращаются в виде строки:

return validation_errors () ;;

1 голос
/ 13 января 2011

У меня есть расширенный помощник проверки формы:

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;
    }
}
0 голосов
/ 21 марта 2013

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...