Ошибки 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();
Ответ 4
from: http://darrenonthe.net/2011/05/10/get-codeigniter-form-validation-errors-as-an-array/
По умолчанию ошибки проверки формы Codeigniter возвращаются в виде строки:
return validation_errors();;
Ответ 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/
Вы должны иметь возможность называть это в любой точке вашего кода. Кроме того, стоит отметить, что есть предыдущий поток, который также обсуждает это.