我在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中获取包含表单验证错误的列表或数组?
答案 0 :(得分:31)
<?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();
答案 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也讨论过这个问题。